undefined标识符的默认值被错误覆盖


在阅读你不知道的javascript上卷3.3章时看到图中划红线出不懂 . 为什么说这是给其他代码挖了坑呀 .

undefined=true
console.log(undefined)          //undefined
console.log(typeof undefined);  //undefined

undefined的值并没有被覆盖呀 ?

阅读 3.3k
5 个回答

现在块级作用域里还是能覆盖的

应该说是历史问题,豆瓣上看到这书是 2015 年出版的了。

Snipaste_2022-03-31_10-03-57.png

使用 IE 切换到 IE8 ,确实可以复现。

Snipaste_2022-03-31_10-03-36.png

有一些内容是历史遗留产物,在历次更新中会被逐步修复。书上写的不可尽信,所谓尽信书不如无书。

结合自己的实践是很好的习惯,值得鼓励。不要纠结于每一个说法,你看的书越多,会发现越多的问题。

从 ES5 (2009) 开始,标准就规定全局 undefined 属性不可写了。所以支持此标准(或更新得标准)的环境,undefined=true; 是不覆盖原值的。

ES4 之前的标准扫了一眼,属性定义跟 ES5 差异比较大,简单浏览一下没有找到明确阻止重写全局 undefined 的规定。

可能在某些环境下(比如某些比较古老的环境,我也不知道哪些 ...),undefined 还是可写的。

2nd ed 里已经没有相关的叙述了。

let 也可以赋值哦
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏