某厂有一条规定:不要直接使用 undefined
关键字,而要使用 void 0
来替代 undefined
起初看到这个规定是很不理解的
为什么会有这么奇葩的规定
众所周知,定义变量的时候,像关键字:null
、true
、false
都是不能定义的
但是 undefined
可以直接定义
因为undefined
不是一个关键字,它只是全局对象window
中的一个属性
这就意味着可以直接定义一个变量名为undefined
,并且重新赋值
这并不意味着就能直接修改undefined
的值,相反undefined
虽然是window的一个属性,但是这个属性是只读的,并不能更改
这样问题又来了,既然无法更改,为什么又会有这样一条规定
看下面这个代码
也就是说,在函数内部声明一个名为undefined
的变量是可以的,并且可以对它重新赋值
虽然这种情况几乎不可能发生,可能某厂也是担心undefined
会带来的一些安全隐患吧
而他们使用的规避方法就是使用 void 0
而不是直接使用 undefined
那 void 0
是什么意思呢?
首先 void
是个关键字,它后面可以跟一个表达式,无论表达式是什么,最终整个表达式返回一个 undefined
也就是说写 void 0
和 void 3.1415926
返回结果是一样的