2012-05-03 22 views
3
$.each(["foo","bar"],function(){console.debug(this);}); 

は、文字列型の "foo"と "bar"を文字列オブジェクトの相当するものに変換します。 ...

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

に対し

は、元の文字列型の "foo" と "bar" を維持します。

私はなぜ$ .each変換を行うのだろうか?そして、もっと重要なことに、この変換は決して起こらないでしょうか?文字列型か文字列型かにかかわらず、文字列をそのまま残していますか? jQuery documentationによると

答えて

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版の厳密モードでは、この好奇心をそそる行為はなくなります。

2

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

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

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

+1

私はこの問題の原因となるJavaScriptの動作が、プリミティブを自動化する[call()関数](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Function/call)だと考えています。 –

関連する問題