3
$.each(["foo","bar"],function(){console.debug(this);});

文字列型の「foo」と「bar」を文字列オブジェクトの同等のものに変換します。

一方...

$.each(["foo","bar"],function(i,e){console.debug(e);});

「foo」と「bar」は元の文字列型のままになります。

$ .eachが変換を行うのはなぜですか?そして、もっと要点を言えば...この変換は決して起こらないはずです-文字列型であろうと文字列オブジェクトであろうと、文字列はそのままにしておきますか?

4

2 に答える 2

2

jQueryのドキュメントによると:

(値にはthisキーワードを使用してアクセスすることもできますが、Javascriptは、単純な文字列または数値であっても、常にこの値をオブジェクトとしてラップします。)

これは、変換を行っているのはjQueryではなくJavascriptであることを示しています。

コールバック関数で値を使用する場合、jQueryはその値自体を渡すため、その型を保持できます。

于 2012-05-03T14:24:01.117 に答える
1

jQueryはここで責任を負いません:それはJavaScriptの癖です。ECMAScript第3版のセクション10.4.3で定義されているように、関数を呼び出すと、this疑似引数が操作されます。特に、null値がグローバルオブジェクト(window)に変換され、プリミティブ値が自動ボックス化されます。

3)それ以外の場合、Type(thisArg)がObjectでない場合は、ThisBindingをToObject(thisArg)に設定します。

パラメータが同じように壊されることはありません。そのため、each()の2番目の引数の方が信頼性が高くなります。

JavaScriptがこれを行う理由は特にありません。これは、Netscapeが当時行ったクレイジーなことの1つに過ぎず、ECMAScriptで標準化する必要がありました。第5版の厳密モードでは、この奇妙な動作はなくなります。

于 2012-05-03T15:31:39.667 に答える