一些企业为了严谨性,会禁止直接赋值undefined,而是使用void返回一个undefined

1
2
3
let a
// a = undefined // 别这么做
a = void 0 // 最好这么做

void是一个关键字,后跟一个表达式,无论怎样都返回undefined

这是因为JS有个bug:undefined并不是关键字,而是window的属性,看这直球的代码提示

当然,这个属性是只读的,不能在它身上做手脚

1
2
window.undefined = 1
console.log(window.undefined) // undefined

可还是架不住可能有人可能吃饱了撑的,非得接着作妖:undefined是只读全局变量是?我写个局部变量呗

1
2
3
4
5
6
const fun = () => {
let undefined = 2
console.log(undefined)
}

fun() // ->2

这下坏了,这输出和预期截然不同啊!……虽然一般来说没人会闲得这么玩吧