【问题标题】:Why does assigning Infinity in JavaScript not throw an error, but not work?为什么在 JavaScript 中分配 Infinity 不会引发错误,但不起作用?
【发布时间】:2026-02-04 23:30:01
【问题描述】:

为什么在尝试重新分配时 infinity 不报错,但不可分配?

var x = 3;

x = 1; // good, normal
true = 3; // error, normal

Infinity = 4; // no error

console.log(Infinity); // Infinity

【问题讨论】:

  • 因为Infinity是只读的,如果你使用严格模式,并试图声明一个名为Infinity的变量,就会触发错误。
  • 始终使用严格模式。总是。

标签: javascript variables variable-assignment infinity


【解决方案1】:

如你所见here:

Infinity 是全局对象的属性,换句话说,是全局范围内的变量

由于它是一个全局属性,您可以访问它并分配任何值。但是,将值分配给 可写属性不会引发任何异常,当您处于 严格模式时,并且不会更改属性的值。

如果您使用“严格模式”,则会引发异常。

"use strict"

Infinity = 4;

【讨论】:

  • NumberString 怎么样?这些都不会在严格模式下产生错误?
  • @SapphireBrick 实际上它们不会产生错误。 NumberString 都是指向构造函数 Number 和构造函数 String 的“指针”。您可以验证这一点,如果您打开控制台并只输入 Number,那么这将是输出:ƒ Number() { [native code] }。有关此对象的更多信息,请查看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。现在尝试执行此let a = new Number('5'),然后检查此a instanceof Number,输出true
  • 如果您为 Number 分配 4 的值。您可以这样做...它只是对对象的引用。然后如果你尝试这个let b = new Number('4) 你会得到一个错误,上面写着 VM802:1 Uncaught TypeError: Number is not a constructor at :1:5 本质上你已经改变了 Number 指向的引用到。这基本上意味着 Number 是一个可写属性。不幸的是,我没有这个链接,但从上面可以看出这一点。旁注:在严格和非严格模式下检查上述代码。您不会注意到任何差异。
  • String 也是如此。希望对您有所帮助。
最近更新 更多