这是我参与8月更文挑战的第11天,活动详情查看: 8月更文挑战
哈喽,大家晚上好哇!今天我们来谈一下JavaScript中一个很有意思的现象, void 0 有什么意义?undefined竟然是可变的?
首先,我们要对void运算符有一个基本的了解: void的正确使用方法是跟表达式,因为void会全部执行自身后面的表达式语句,但是它的返回值永远是undefined。
我们要明白三件事情,一个是void运算符的作用,一个是void的返回值,还有一个是undefined是可以被重定义的。
1,
void
后需要跟表达式,表达式中的语句会全部执行。
void
运算符
对给定的表达式进行求值,然后返回
undefined
void console.log("大家好,我是南极大冰块") // 控制台打印“大家好,我是南极大冰块”
void alert("大家好,我是南极大冰块") // 浏览器弹出“大家好,我是南极大冰块”
void 1+2 // 返回 NAN,想一下为什么呢???
// 这是因为1+2外面没有加(),默认从左到右执行,void 1为undefined,undefined+2为NAN
void (1+2) // 返回值是undefined
2,void
返回值永远是undefined
let a = void 0
console.log(a) // 打印结果为undefined
let a = console.log("大家好,我是南极大冰块")
console.log(a) // 打印结果为undefined
let a = void alert("大家好,我是南极大冰块")
console.log(a) // 打印结果为undefined
let a = void (1+2)
console.log(a) // 打印结果为undefined
3,undefined
在局部变量中是可以被重新定义的
虽然在ES5开始,undefined就已经被设定为仅可读的,但是在局部作用域内,undefined依然是可变的。
function fun(){
let undefined = 10
console.log(undefined)
fun() // 此时打印的undefined为10
之所以用 void 0
或者 void(0)
代替 undefined
,很大一方面的原因就是undefined
可能会被重新赋值,你不能保证别人的代码里undefined
是undefined
。但是void
的返回值一定是undefined
。
另外,由于void 0
比undefined
要短一些,所占字符空间更少,所以在js压缩代码中,我们也经常能看到用void 0来代替undefined的情况。就像局部变量在压缩代码中会被a,b,c来代替一样。当然啦,如果你愿意,写void 1
来代替undefined
也是一样的。
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛