window.toString.call не определен в IE8
-
13-09-2019 - |
Вопрос
Когда ты бежишь:
window.toString.call("")
в FF / CH все в порядке, но в IE8 вы получаете ошибку скрипта.Проведя еще немного расследования, выяснилось, что window.toString.call
не определено в IE8?
Вы также можете запустить этот:
window.toString instanceof Function;
// false
alert(window.toString);
// function toString() {
// [native code]
// }
Почему это так и как это решить? И я начал задаваться вопросом, как вообще получается, что jQuery работает?
Решение
window
является хост-объектом, а Спецификация языка ECMAScript (3-е издание) не требует, чтобы объекты хоста были производными от собственных Object
объект.В IE (и, вероятно, в некоторых других браузерах) хост-объекты таковыми не являются, поэтому они не поддерживают ни один из собственных методов или свойств (хотя они могут иметь методы или свойства с теми же именами, что и собственные методы или свойства, доступные скриптам).
Если все, что вы хотите, это получить доступ к родной языковой реализации по умолчанию toString
метод, то вы должны использовать Object.prototype.toString.call("")
.
Другие советы
Никфиц прав, метод toString для объекта host, который вы находите, предназначен исключительно для того, чтобы, если вы сделали
оповещение (окно);
вы бы получили текст [object]
Все, чего достигнет метод JavaScript toString(), используемый в ваших примерах, - это создать строку из string, поэтому правильный способ сделать то, что вы пытаетесь, это;
var a =new String ("");
или просто
var b = "";
или, если ты действительно хочешь быть глупым;
var b = "".toString();