Определение типа с помощью 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-элементами и коллекциями разные значения, но почему стандартные вещи по разному :( |
Будешь смеяться, но все примеры абсолютно точно соответствуют требованиям стандарта. Вместо null/undefined в call подставляется глобальный объект. Для глобального объекта значение свойства [[Class]] может быть и есть implementation-dependent (15.1 ES). То есть там может быть что угодно. ;-)
|
Цитата:
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… :) пойду отдохну, хватит сидеть за компом)
|
Часовой пояс GMT +3, время: 06:34. |