这是我参与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也是一样的。
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛