1
'onhashchange'in(window)

この構成の他の例のように、仕事があることは驚くことではありませんが、文字列を分離する必要はありin()ません。new(XMLHTTPRequest)typeof(x)in

これはECMAScriptの仕様に準拠していますか?ChromeとFFで動作し、IEはテストされていません。

4

3 に答える 3

1

window私の知る限り、この特定のインスタンスで括弧で囲むかどうかに違いはありません。いずれにせよ、windowオブジェクトのこのメンバーをチェックします。

スペースを使用すると、混乱が少なくなる可能性があります。

'onhashchange' in (window)

と同じ

'onhashchange' in window

inは関数ではありませんが、スペースを削除すると、そのように読み取る方法がわかります。括弧で囲むことの利点の1つwindowは、コードを縮小できることです。

'onhashchange'in(window)

かっこなしではできないこと。

于 2012-05-04T02:55:33.800 に答える
1

'は文字列を終了するトークンであるため、ペア''は意味的に明確です。文字列の終わりに到達したことをレクサーが認識するために、文字列の終わりの後に空白は必要ありません。

別の言い方をすれば、これは同じ理由で'Hello '+'world'機能するということです。

さらに、inはキーワードであり、関数ではありません。あなたは「関数呼び出し演算子」として考えているように見えます()が、この場合、それは曖昧さを解消する括弧にすぎません。

「なぜうまくいくの1 +(2)か」と尋ねるようなものです。+は、パレンでフォローしているからといって関数にはなりません。同様に、次のように機能します。

function foo(){}

foo

();

Javascriptは、空白の規則が脆弱です。

于 2012-05-04T03:09:40.900 に答える
0

この表記法があなたを混乱させているかどうかはわかりませんが (それはおそらくin()メソッドですか?)、inほとんどの人が正しく理解していない JS の要素の 1 つです (私はごく最近までそれを本当に理解していませんでした)。これは、次のことを示す単純化されたバージョンinです。

var foo = {
    'bar':1,
    'barbar':2
}

console.log('bar' in foo); //true
console.log('baz' in foo); //false

これをさらにややこしくしているのは、あたかも ( ) がイテレータであるかのようinに、ループ内で使用できることです。私がループについて考える傾向がある方法は次のとおりです。for()infor

for (exp1; condition; exp2) {
    /* statements */
}

for (condition) {
    /* statements */
}

つまり、ループはin条件が失敗するまで続きます。これは、メンバーが不足したときに発生します。

于 2012-05-04T03:07:36.443 に答える