2

ES5非厳密モードで次の結果になるのはなぜですか?

Object.prototype.toString.call(null);
=> [object Null]

とすれば

Object.prototype.toString.call(window);
=> [object global]

非厳密モードでは、2つの行は同一である必要があります。これは、someFunction.call(null)どちらと同等でsomeFunction()ある必要があるためsomeFunction.call(window)です。

4

1 に答える 1

4

ES5によると、非厳密モードで機能コードを入力する場合:

それ以外の場合、thisArgがnullまたは未定義の場合は、ThisBindingをグローバルオブジェクトに設定します。

そうです、thisデフォルトでグローバルオブジェクトになるはずです。しかし§15.3.4.4Function.prototype.callには次のものがあります。

thisArg値は、変更なしでthis値として渡されます。これはエディション3からの変更であり、未定義またはnullのthisArgがグローバルオブジェクトに置き換えられ、ToObjectが他のすべての値に適用され、その結果がthis値として渡されます。

ついに:

15.2.4.2 Object.prototype.toString()

toStringメソッドが呼び出されると、次の手順が実行されます。

If the this value is undefined, return "[object Undefined]".
If the this value is null, return "[object Null]".
于 2012-10-31T06:29:42.700 に答える