window.toString.call non è definito in IE8
-
13-09-2019 - |
Domanda
Quando si esegue:
window.toString.call("")
tutto bene in FF / CH, ma in IE8 si ottiene un errore di script. Indagando su un po 'di più si è scoperto, che window.toString.call
non è definito in IE8?
È inoltre possibile eseguire questa:
window.toString instanceof Function;
// false
alert(window.toString);
// function toString() {
// [native code]
// }
Perché è questo e come risolverlo? e ho iniziato a chiedermi come mai jQuery funziona in primo luogo?
Soluzione
window
è un oggetto host, e il specifica del linguaggio ECMAScript (3a edizione ) non richiede oggetti host per essere derivato dall'oggetto Object
nativo. In IE (e probabilmente in alcuni altri browser) oggetti host non sono, in modo da non sostenere uno dei metodi o proprietà nativi (anche se possono avere metodi o proprietà con gli stessi nomi dei metodi nativi o proprietà che sono accessibili ai script).
Se invece si è interessati ad entrare in possesso di metodo nativo predefinito della implementazione del linguaggio toString
allora dovreste usare Object.prototype.toString.call("")
.
Altri suggerimenti
NickFitz è corretta, il metodo toString sull'oggetto host che si stanno trovando è puramente in modo che se avete fatto
alert (finestra);
si otterrebbe il testo [oggetto]
Tutto ciò che il metodo javascript toString () utilizzato nei tuoi esempi sarebbero acheive è quello di fare una stringa da una stringa in modo che il modo corretto di fare ciò che si sta cercando è;
var a =new String ("");
o semplicemente
var b = "";
o se si vuole veramente essere sciocco;
var b = "".toString();