为什么javascript让NaN可以在功能上被覆盖?

时间:2017-04-20 12:11:25

标签: javascript

我在chrome 56

中测试了这段代码

我刚发现这个奇怪的代码。

如果我在控制台const NaN = '';

中输入此代码

我收到了我期望的这条消息。 Uncaught SyntaxError: Identifier 'NaN' has already been declared at <anonymous>:1:1

但是,如果我在函数中覆盖NaN关键字,就像这样

function a(){ const NaN = ''; return NaN; }

返回空字符串''

为什么javascript允许关键字在功能上被覆盖?

2 个答案:

答案 0 :(得分:1)

From MDN Documentation

  

NaN是全局对象的属性。 NaN的初始值是   非数字 - 与Number.NaN的值相同。在现代   浏览器,NaN是一种不可配置的不可写属性。即便   情况并非如此,请避免重写。

文档说明它在所有现代浏览器中都是不可配置且不可写的,即使可能,也应该避免更改它。

答案 1 :(得分:1)

根据MDN文档:

  

NaN 是全局对象的属性,即它是全局范围内的变量。

它不可重写,您无法为其指定任何其他值。

注意它实际上是可能的,但不在全球范围内。如果您在函数内部执行此操作,则可以覆盖它的值并访问它,但在函数范围内仅 。即使您已将值重新分配给函数内的NaN属性,也会影响全局对象不会

同样涉及例如Infinity

不要误导const关键字,无论是let还是var都不可能,但值得一提的是 - 使用{{1}不会抛出任何错误,但全局对象仍然不会被淹没。

&#13;
&#13;
var
&#13;
&#13;
&#13;