Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2009, 17:33
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Определение типа с помощью Object.prototype.toString.call
alert(Object.prototype.toString.call(undefined));


Google Chrome 4
[object builtins]


Safari 4
[object DOMWindow]


Firefox 3.5, Opera 10
[object Window]


IE8, IE6
[object Object]


Тот же эффект с null. Ладно уж с DOM-элементами и коллекциями разные значения, но почему стандартные вещи по разному

Последний раз редактировалось Octane, 25.10.2009 в 17:39.
Ответить с цитированием
  #2 (permalink)  
Старый 25.10.2009, 18:27
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Будешь смеяться, но все примеры абсолютно точно соответствуют требованиям стандарта. Вместо null/undefined в call подставляется глобальный объект. Для глобального объекта значение свойства [[Class]] может быть и есть implementation-dependent (15.1 ES). То есть там может быть что угодно. ;-)
Ответить с цитированием
  #3 (permalink)  
Старый 25.10.2009, 19:05
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Zeroglif
Вместо null/undefined в call подставляется глобальный объект
Кроме, видимо, Chrome, который различает this-value для undefined и null.

alert(Object.prototype.toString()); // [object Object]
alert(Object.prototype.toString.call(undefined)); // [object builtins]
alert(Object.prototype.toString.call(this)); // [object global]

По идее, первые два вызова должны (по алгоритму Function.prototype.call, 15.3.4.4) подставить thisArg, как глобальный объект (а третий - и так глобальный объект), но Хром различает реально переданный undefined от непереданного значения.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 25.10.2009 в 19:22.
Ответить с цитированием
  #4 (permalink)  
Старый 25.10.2009, 19:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Я просто забыл, что toString будет вызвана в контексте window, когда первый аргумент метода call равен null или undefined… пойду отдохну, хватит сидеть за компом)

Последний раз редактировалось Octane, 25.10.2009 в 19:28.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 12:39
Возможна ли смена типа созданного объекта в Javascript? phprus Общие вопросы Javascript 9 04.07.2009 02:41
Подключение событий в onload и определение их типа anstm Events/DOM/Window 2 07.04.2009 15:20
Конвертирование типа String в число Forsaken Общие вопросы Javascript 1 30.11.2008 23:51
Не просто определение типа браузера... Driver86 Общие вопросы Javascript 6 08.04.2008 21:35