2017-04-25 18 views
0

私はIE9で奇妙な動作を発見しました。我々はコンテキストを返す関数で考えてみましょう:IE9でIE9は 'this'をオブジェクトにキャストします

function toContext() { return this; } 

を私はいくつかの原始的な文脈でそれを呼び出す場合、コンテキストは、IE10で

toContext.call(3); // => [object Number] 
toContext.call(""); // => [object String] 

をObjectにキャストされて以降、それが渡さ返しますプリミティブですが、IE9はこの奇妙な結果をもたらし、私のコーディングパターンを崩壊させます。

私はIE11でIE9をエミュレートしますが、これはエミュレーションに問題がある可能性があります。私は古いIEのこの動作を探しましたが、役に立たないものは何も見つかりませんでした。誰かがこの動作がネイティブIE9に影響するか、あるいは誰かがこのトピックについてもっと知っていることを確認できますか?

+0

プリミティブを取得するには厳密モードを使用し、オブジェクトにキャストするには粗雑なモードを使用します。値をオブジェクトにキャストするには、 'getContext.call'ではなく' Object'だけを使用してください。 – Bergi

答えて

1

IE9 does not support strict modeこれは使用しているようですが、プリミティブの値を得るにはthisの値が必要です。

+0

すべての主要なブラウザのコンソールは厳密なモードではありません(宣言せずに変数を割り当てることができます、予約語を宣言することなどができます)。そして、すべてのブラウザはコンソールのプリミティブ 'this'をうまく処理します。また、私は文脈と厳格なモードの間に関係を見いださなかった。厳密なモードでは、ヌル・コンテキストがグローバルに切り替えられていないことを前に説明した記事。私は厳密なモードの「これ」に対する他の結果を見いださなかった。 – Vaclav

+0

[こちらのドキュメント](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Securing_JavaScript)が役に立つかもしれません。汚い関数では、 'this'がオブジェクトにキャストされますこれは 'null'と' undefined'のグローバルオブジェクトとなり、他のプリミティブ値のボクシングとなります。これはまさにあなたが経験している行動です。 – Bergi

+0

厳密なモードで 'toContext'を定義していない限り、テストしたブラウザやコンソールの' toContext'関数からのプリミティブな戻り値は得られません。 – Bergi

関連する問題