写点什么

void 0 有什么意义?undefined 竟然是可变的?

  • 2022 年 7 月 21 日
  • 本文字数:945 字

    阅读完需:约 3 分钟

前言

哈喽,大家下午好哇!今天我们来谈一下 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为NANvoid (1+2) // 返回值是undefined
复制代码

2,void返回值永远是undefined

例如:



let a = void 0console.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也是一样的。

后记

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


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

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
void 0 有什么意义?undefined竟然是可变的?_7月月更_南极一块修炼千年的大冰块_InfoQ写作社区