我在chrome 56
中测试了这段代码我刚发现这个奇怪的代码。
如果我在控制台const NaN = '';
我收到了我期望的这条消息。 Uncaught SyntaxError: Identifier 'NaN' has already been declared at <anonymous>:1:1
但是,如果我在函数中覆盖NaN关键字,就像这样
function a(){ const NaN = ''; return NaN; }
返回空字符串''
为什么javascript允许关键字在功能上被覆盖?
答案 0 :(得分:1)
NaN是全局对象的属性。 NaN的初始值是 非数字 - 与Number.NaN的值相同。在现代 浏览器,NaN是一种不可配置的不可写属性。即便 情况并非如此,请避免重写。
文档说明它在所有现代浏览器中都是不可配置且不可写的,即使可能,也应该避免更改它。
答案 1 :(得分:1)
根据MDN文档:
NaN 是全局对象的属性,即它是全局范围内的变量。
它不可重写,您无法为其指定任何其他值。
注意它实际上是可能的,但不在全球范围内。如果您在函数内部执行此操作,则可以覆盖它的值并访问它,但在函数范围内仅 。即使您已将值重新分配给函数内的NaN
属性,也会影响全局对象不会。
同样涉及例如Infinity
。
不要误导const
关键字,无论是let
还是var
都不可能,但值得一提的是 - 使用{{1}不会抛出任何错误,但全局对象仍然不会被淹没。
var
&#13;