为什么'NaN'和'Undefined'不是Javascript中的保留关键字?

时间:2011-08-24 10:14:04

标签: javascript keyword

我们可以这样做:

NaN = 'foo' 

以及

undefined = 'foo'

为什么他们不是保留关键字?

编辑1(DownVoters):

  1. 我认为应该实施它,以确保在我们寻找number时,它是number:)

  2. 如果我们应该使用IsNaN()typeof,那么为什么需要NaNundefined

5 个答案:

答案 0 :(得分:8)

我无法告诉您为什么,但undefinedNaN实际上是全局对象的属性

  

15.1.1 Value Properties of the Global Object

     

15.1.1.1 NaN
   NaN 的值为 NaN see 8.5)。此属性具有{[[Writable]]属性: false ,[[Enumerable]]: false ,[[Configurable]]: false }。
  (...)
   15.1.1.3 undefined
   undefined 的值为未定义see 8.1)。此属性具有{[[Writable]]属性: false ,[[Enumerable]]: false ,[[Configurable]]: false }。

undefinedNaN)与相应的属性之间存在差异。

您可能会注意到[[Writable]]: false。我不确定ES5中是否有新功能(并且可能不适用于所有浏览器),但在较新的浏览器(在Firefox 6中测试过)中,为undefined分配新值无效:

[12:28:15.090] < undefined = "foo"
[12:28:15.093] > "foo"
[12:28:19.882] < undefined
[12:28:19.883] > undefined

所以虽然似乎你可以指定一个新值,但实际上不能


  

为什么他们不是保留关键字?

不确定是否有特定原因不使其成为保留关键字,但是已经决定反对它。语言仍然有效。你不能覆盖这些值,所以没关系。

测试某个数字是否为NaN的唯一方法是使用isNaN()

答案 1 :(得分:7)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN

  

NaN是全局对象的属性。

     

NaN的初始值是Not-A-Number - 与值相同   Number.NaN。在现代浏览器中,NaN是不可配置的,   不可写财产。即使不是这种情况,也要避免   压倒它。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined

  

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

     

undefined的初始值是未定义的原始值。

答案 2 :(得分:3)

我现在在推测,但我认为NaNundefined不是关键字的原因是因为您通常不会将这些值分配给变量。

var x = undefined; // doesn't make sense, use null!
var y = NaN; // You can't do much with this variable!

undefined基本上意味着uninitialized,如果您想明确该值未知,请使用null。所以undefined通常意味着未初始化或JavaScript代码的结果出错。

NaN很少手动分配,只是因为您无法对此值做多少工作。这通常是计算错误的结果。 JavaScript的制造者可能不希望将这个值赋予原始值的可见性。

此外,NaN也存在于其他语言中,也不会用作关键字。例如:在C#中,NaN由Double.NaN表示,因为您没有区分JavaScript中的浮点值和整数值,我猜这就是为什么他们将NaN放在一起全球标识符!

我希望这能解决问题!

答案 3 :(得分:1)

NaN不是关键字,而是全局对象的内置属性,因此可以替换(例如undefined,但不像关键字this或文字{{ 1}},truefalse)。

您可以使用null函数测试值是否为NaN。此外,isNaN()被定义为对所有事物都不相等,包括其本身。

或者在坚果壳中你可以这么说:

NaN是当您尝试将非数字作为数字处理时返回的值。例如,7次“abc”的结果不是数字。它的旧形式是Number.NaN您可以使用NaN函数测试非数字值。

希望这有帮助。

答案 4 :(得分:1)

NaNundefined都是JavaScript中的

  1. NaN是数字类型。 (表示“无效数字”)。
  2. undefined是未定义的类型。 (当没有为变量分配任何内容时,JavaScript将为undefined声明中的var赋值)。

而且都是全局窗口对象的只读值(属性)。

这就是为什么 JavaScript无法将值作为保留字的原因。

相关问题