Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Java脚本中的无保留标识符_Javascript - Fatal编程技术网

Javascript Java脚本中的无保留标识符

Javascript Java脚本中的无保留标识符,javascript,Javascript,JavaScript有大约44个标识符,它们是保留关键字,但Infinity、NaN和undefined在JavaScript中被归类为非保留标识符。为什么它们被称为标识符,为什么它们没有被保留?未定义的,NaN和无限实际上是全局对象的属性: NaN是全局对象的属性 NaN的初始值不是数字-与Number.NaN的值相同。在现代浏览器中,NaN是一个不可配置、不可写的属性。即使不是这样,也要避免覆盖它 未定义是全局对象的属性,即它是全局范围内的变量 未定义的初始值是未定义的原语值 无穷大是

JavaScript有大约44个标识符,它们是保留关键字,但Infinity、NaN和undefined在JavaScript中被归类为非保留标识符。为什么它们被称为标识符,为什么它们没有被保留?

未定义的
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++