Просмотр полной версии : Определение типа с помощью 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-элементами и коллекциями разные значения, но почему стандартные вещи по разному :(
Zeroglif
25.10.2009, 18:27
Будешь смеяться, но все примеры абсолютно точно соответствуют требованиям стандарта. Вместо null/undefined в call подставляется глобальный объект. Для глобального объекта значение свойства [[Class]] может быть и есть implementation-dependent (15.1 ES). То есть там может быть что угодно. ;-)
Dmitry A. Soshnikov
25.10.2009, 19:05
Вместо 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 от непереданного значения.
Я просто забыл, что toString будет вызвана в контексте window, когда первый аргумент метода call равен null или undefined… :) пойду отдохну, хватит сидеть за компом)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot