Почему " NaN " и "Undefined" не являются зарезервированными ключевыми словами в Javascript?
мы можем сделать:
NaN = 'foo'
а также
undefined = 'foo'
почему они не зарезервированы ключевые слова?
Edit 1 (DownVoters):
Я думаю, что это должно быть реализовано, чтобы быть уверенным, что когда мы ищем
number
, этоnumber
:)если мы должны использовать
IsNaN()
илиtypeof
почемуNaN
или есть?
4 ответов
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN
NaN является свойством глобального объекта.
начальное значение NaN не является числом-таким же, как и значение Число.бабушка. В современных браузерах NaN не настраивается, незаписываемый собственность. Даже если это не так, избегайте основной он.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/undefined
undefined является свойством глобального объекта, т. е. является переменной в глобальной области видимости.
начальное значение undefined является примитивным значением undefined.
Я не могу сказать вам почему, а undefined
и NaN
на самом деле свойства глобального объекта:
15.1.1 свойства значения глобального объекта
15.1.1.1 Нэн
Значение Нэн is Нэн (см. п. 8.5). Это свойство имеет атрибуты { [[Writable]]:false, [[перечисли]]: false, [[настраивать]]: false }.
(...)
15.1.1.3 не определено
Значениеundefined
is неопределено (см. 8.1). Это свойство имеет атрибуты { [[Writable]]:false, [[перечислить]]: false, [[настраивать]]: false }.
существует разница между стоимостью undefined
(NaN
) и соответствующее свойство.
вы можете заметить [[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()
в любом случае.
я сейчас размышляю, но почему я думаю NaN
и undefined
не являются ключевыми словами, потому что вы обычно не присваиваете эти значения переменным.
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
с глобальным Идентификаторы!
надеюсь, это все прояснит!
NaN
не является ключевым словом, а скорее встроенным свойством глобального объекта ,и как таковое может быть заменено (например,undefined
, но в отличие от ключевого слова this или литералов true
, false
и null
).
вы можете проверить, является ли значение NaN с помощью определяется как неравный для всего, включая себя.
или в ореховой скорлупе вы можете сказать, что:
NaN
- значение, возвращаемое при попытке обработать то, что это не число как число. Например, результаты 7 раз " abc " не являются числом. Старая его форма-число.NaN вы можете проверить значения не-числа с помощью