2017-06-09 11 views
0

arr配列を定義して割り当てる小さな例があります。ifステートメント内で変数を取得/設定します

var arr; 

if (arr = [1]) { // arr is an array here, it contains 1 element 
    console.log(arr.length); // 1 
} 

その後、私はこの行で配列

var arr; 

// arr is an array here, but why cannot I assign to length property? 
if (arr = [1] && arr.length) { 
    console.log(arr.length); 
} 

Uncaught TypeError: Cannot read property 'length' of undefined

+0

VaRのARR。 // arrは配列ですが、なぜlengthプロパティに割り当てることができませんか? if((arr = [1])&& arr.length){ console.log(arr.length); } – JYoThI

答えて

3
var arr; 

// arr is an array here, but why cannot I assign to length property? 
if (arr = [1] && arr.length) { 
    console.log(arr.length); 
} 

起因するoperator precedenceを失敗しました。 &&は、割り当て=よりも優先順位が高いため、最初に評価されます。

[1] && arr.length式は、配列リテラルとarr.length式で構成されています。その時点でarrが定義されていないため、arr.lengthは失敗します。

参考文献:

if (arr = ([1] && arr.length)) { 

理由は&&が代入演算子よりも強く結合することがあるよう

+0

多くの感謝!それは助けて! – Vayne

1

lengthを取得したい:

if (arr = [1] && arr.length) 

あなたはARRする配列を割り当てられ、同時に試してみました長さをチェックする。 JSはまだarrに配列が含まれていることを知らないので、lengthプロパティにアクセスしようとすると例外がスローされます。第2の条件チェックに到達すると、JSはすでにarrが配列であることを知っているので

if (arr = [1]) { 
    if (arr.length) { 
     console.log(arr.length); 
    } 
} 

は比較のために、これは例外をスローしません。

2

あなたのあなたは、配列の割り当て部分に高い優先度を与える必要があり、このif ((arr = [1]) && arr.length)

ようにする必要があります。最初に割り当てて比較します。

優先度は何もありません。 &&が代入演算子よりも高い優先順位がある、あなたのコード内のように、どの部分のコード最初の演算子の優先順位に基づいて実行=ので、それが定義されていないので、割り当てられていないARRながら

\t var arr; 
 

 
// arr is an array here, but why cannot I assign to length property? 
 
if ((arr = [1]) && arr.length) { 
 
    console.log(arr.length); 
 
}

+0

ありがとうございました!それは助けて! – Vayne

1

JSはあなたのif文を解析します。その結果、JSはarrがまだ定義されていない時点で[1] && arr.lengthを評価しようとしています。

あなたがIFは、コードのにおいがあるの内側に

if ((arr = [1]) && arr.length) { 
0

割り当て変数を記述する必要があります。

var arr; 
var x = 1; 

if (arr = [1] && arr.length && x == 1) { 
    console.log(arr.length); 
} 

上記のif条件はどのように見えますか?ほとんどの人はあなたがarrに値を割り当てていることを知らないかもしれませんが、arr == [1]かどうかを確認していると思います。

良好例:

var arr = [1]; 

if (arr.length > 0) { 
    console.log(arr.length); 
} 
+0

あなたは私が何を求めているのか分からない – Vayne

関連する問題