Javascript Java脚本中的无保留标识符
JavaScript有大约44个标识符,它们是保留关键字,但Infinity、NaN和undefined在JavaScript中被归类为非保留标识符。为什么它们被称为标识符,为什么它们没有被保留?Javascript Java脚本中的无保留标识符,javascript,Javascript,JavaScript有大约44个标识符,它们是保留关键字,但Infinity、NaN和undefined在JavaScript中被归类为非保留标识符。为什么它们被称为标识符,为什么它们没有被保留?未定义的,NaN和无限实际上是全局对象的属性: NaN是全局对象的属性 NaN的初始值不是数字-与Number.NaN的值相同。在现代浏览器中,NaN是一个不可配置、不可写的属性。即使不是这样,也要避免覆盖它 未定义是全局对象的属性,即它是全局范围内的变量 未定义的初始值是未定义的原语值 无穷大是
未定义的
,NaN
和无限
实际上是全局对象的属性:
NaN是全局对象的属性
NaN的初始值不是数字-与Number.NaN的值相同。在现代浏览器中,NaN是一个不可配置、不可写的属性。即使不是这样,也要避免覆盖它
未定义是全局对象的属性,即它是全局范围内的变量
未定义的初始值是未定义的原语值
无穷大是全局对象的一个属性,即它是全局范围内的一个变量
无穷大的初始值是Number.正无穷大。值无穷大(正无穷大)大于包括其自身在内的任何其他数字。该值在数学上表现为无穷大;例如,任何正数乘以无穷大就是无穷大,任何除以无穷大的都是0
指 15.1.1.1 NaN NaN的值为NaN(见8.5)。此属性具有属性{[[Writable]]:false、[[Enumerable]]:false、[[Configurable]]:false} 15.1.1.2无穷大 无穷大的价值是+∞ (见8.5)。此属性具有属性{[[Writable]]:false、[[Enumerable]]:false、[[Configurable]]:false} 15.1.1.3未定义 未定义的值为未定义(见8.1)。此属性具有属性{[[Writable]]:false、[[Enumerable]]:false、[[Configurable]]:false} 您可能会注意到[[Writable]]:false。在较新的浏览器中,将新值指定给“未定义”无效:
> undefined = 'foo'
< "foo"
> undefined
< undefined
>未定义='foo'
<“富”
>未定义
<未定义
值得一提的是,现代浏览器不允许覆盖未定义的(等…)。更不用说严格模式了。非常感谢,这非常有用。@RoyiNamir确信他们将(函数(未定义){console.log(未定义);})(“Cat”)代码>他们所要做的就是阻止您覆盖全局对象的未定义属性。@BenjaminGruenbaum当然。这就是我的意思。(应该澄清一下,它不允许覆盖全局对象(与同名参数相反))经典地说,这是一个现在很难修复的错误。它们应该被保留(例如null
is)。这就是为什么有些人使用void 0
而不是undefined
。这也是为什么你可以做一些古怪的事情,比如Infinity++
。