Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему typeof (null) не равно null 
:(
    Опции темы
Burrr
Дата 24.11.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Собственно сабж.

Код
alert(typeof null); // Выведет object вместо ожидаемого null


Это напрочь не вписывается в моё текущее понимание джаваскрипта. Спецы, можете объяснить почему?

За одно приведу цитату из ecma-262:
Цитата
8 Types

A value is an entity that takes on one of nine types. There are nine types (Undefined, Null, Boolean, String,
Number, Object, Reference, List, and Completion). Values of type Reference, List, and Completion are used
only as intermediate results of expression evaluation and cannot be stored as properties of objects.

8.2 The Null Type
The Null type has exactly one value, called null.


Это сообщение отредактировал(а) Burrr - 24.11.2008, 16:21


--------------------
PM MAIL ICQ   Вверх
Zeroglif
Дата 24.11.2008, 21:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Burrr @  24.11.2008,  16:18 Найти цитируемый пост)
почему?

Выдача строки 'object' для null описана в стандарте (11.4.3 The typeof Operator), не стоит доверять тому, как именно называются операторы (всякие там instanceof и проч.), алгоритм важнее названия...
PM MAIL WWW   Вверх
Samotnik
Дата 25.11.2008, 13:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



потому что для  null выводится  object 
и это явно описанно в спецификации   smile 
Цитата

Undefined  "undefined"
Null  "object"
Boolean  "boolean"
Number  "number"
String  "string"
Host object (provided by the JS environment)  Implementation-dependent
Function object (implements [[Call]] in ECMA-262 terms)  "function"
Any other object  "object"

PM MAIL   Вверх
Burrr
Дата 26.11.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Samotnik, Zeroglif, спасибо!
Действительно, не догадался я дальше стандарт прочесть.

Цитата
Null  "object"


А какова логика такого возврата? Это немного бесмысленный вопрос, т.к. принципиально ничего не изменит, но всё же интересно почему...


--------------------
PM MAIL ICQ   Вверх
Samotnik
Дата 26.11.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



ктото этот случай в баги записал http://bugs.adobe.com/jira/browse/ASC-2940   smile 
ммм..  как показывает гугол не он один
А если серьезно, то не понятно почему  smile  Наверное просто так захателось. 
PM MAIL   Вверх
Samotnik
Дата 26.11.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



кстати для массивов тоже  самое   smile 
Код

alert(typeof []); 

PM MAIL   Вверх
Burrr
Дата 26.11.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Samotnik, с массивом как раз всё понятно, это не базовый тип, а расширение объектного, так что typeof все верно вернул.

Спасибо за ссылку! Насколько я понял в четвертой версии ecmascript (ES4) это зафиксят:
http://wiki.ecmascript.org/doku.php?id=discussion:typeof

Это сообщение отредактировал(а) Burrr - 26.11.2008, 18:20


--------------------
PM MAIL ICQ   Вверх
Zeroglif
Дата 26.11.2008, 22:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Burrr @  26.11.2008,  16:31 Найти цитируемый пост)
всё же интересно почему... 

Цитата

>> I think my fundamental problem is that I do not understand the purpose of
>> having both an Undefined and Null type/value in ECMAScript. 

Brendan Eich:
The undefined value is the initial value of properties created without 
any other value, and the value returned when you access a property by a 
qualified expression (e.g., obj.prop, not prop) and no such property 
exists in the object (meaning directly in the object, or indirectly in 
an object on its prototype chain). 

The null value is different, and connotes "no object" or "null 
reference".  It's occasionally useful to have a distinct value for these 
connotations from the undefined value
, but note that null == undefined 
(and vice versa; == is reflexive and symmetric but not transitive; of 
course, as you would hope, null !== undefined). 

http://groups.google.com/group/netscape.pu...306c3b86de8c0d9

Можно предположить, что логика была такая -  null чаще всего "занимает" место под объект на время его отсутствия, свойство существует, используется или будет использовано... а так... баг, конечно, можно было поступить честнее... smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.