Почему "NaN" и "Undefined" не являются зарезервированными ключевыми словами в Javascript? - программирование
Подтвердить что ты не робот

Почему "NaN" и "Undefined" не являются зарезервированными ключевыми словами в Javascript?

Мы можем сделать:

NaN = 'foo' 

а также

undefined = 'foo'

Почему они не являются зарезервированными ключевыми словами?

Изменить 1 (DownVoters):

  • Я думаю, что это должно быть реализовано, чтобы быть уверенным, что когда мы ищем number, это number:)

  • Если мы должны использовать IsNaN() или typeof, то почему нужны NaN или undefined?

4b9b3361

Ответ 1

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 - это примитивное значение undefined.

Ответ 2

Я не могу сказать вам, почему, но undefined и NaN на самом деле свойства глобального объекта:

15.1.1 Свойства свойства глобального объекта

15.1.1.1 NaN
Значение NaN NaN (см. 8.5). Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
(...)
15.1.1.3 undefined
Значение undefined undefined (см. 8.1). Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: 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() в любом случае.

Ответ 3

Я сейчас размышляю, но причина, по которой я думаю, что 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 с помощью глобальных идентификаторов!

Надеюсь, это прояснит ситуацию!

Ответ 4

NaN не является ключевым словом, а скорее является встроенным свойством глобального объекта и как таковое может быть заменено (например, undefined, но в отличие от ключевого слова this или литералы true, false и null).

Вы можете проверить, соответствует ли значение NaN с помощью функции isNaN(). Более того, NaN определяется как не равный всему, включая себя.

Или в ореховой оболочке вы можете сказать, что:

NaN - это значение, возвращаемое при попытке обработать то, что не является числом в качестве числа. Например, результаты 7 раз "abc" не являются числом. Его старой формой является Number.NaN. Вы можете проверить значения not-a-number с помощью функции isNaN().

Надеюсь, что это поможет.

Ответ 5

NaN и undefined являются значениями в JavaScript.

  1. NaN имеет числовой тип. (оно обозначает "недопустимый номер").
  2. undefined имеет неопределенный тип. (когда переменной ничего не назначено, JavaScript назначается undefined, в частности в объявлении var).

А также оба являются доступными только для чтения значениями (свойством) объекта глобального окна.

Поэтому JavaScript не может создавать значения как зарезервированное слово.