相关文章推荐
温柔的煎鸡蛋  ·  Flutter ...·  1 周前    · 
魁梧的小笼包  ·  JavaScript --- ...·  昨天    · 
发呆的白开水  ·  Spring Boot ...·  4 月前    · 
威武的蜡烛  ·  问与答68: ...·  5 月前    · 
void 0 有什么意义?undefined竟然是可变的?

这是我参与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可能会被重新赋值,你不能保证别人的代码里undefinedundefined。但是void 的返回值一定是undefined

另外,由于void 0undefined要短一些,所占字符空间更少,所以在js压缩代码中,我们也经常能看到用void 0来代替undefined的情况。就像局部变量在压缩代码中会被a,b,c来代替一样。当然啦,如果你愿意,写void 1来代替undefined也是一样的。

你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。

关注我,前端路途一起走。嘿哈~😛