2016-08-06 6 views
3

Javascriptでのこの行の解釈は何ですか?1行の解釈Javascriptコード

var x[],matrix[],n; 
... 
n = (matrix = x) && matrix.length; 

私はそれを検索しましたが、ヒントが見つかりませんでした。

ありがとうございました

それはこの行い
+0

実行してみましたか?結果は何でしたか?何があなたを驚かせた? – jonrsharpe

+0

行列が長さの配列であり、xがxと等しい配列である場合、nはブール値になります。 – Kosch

+1

'matrix = x; n = matrix && matrix.length; ' –

答えて

8

  1. xmatrixの値を割り当てます。 matrix = x式の結果は割り当てられた値です(これはすべての代入式に当てはまります)。その値を「x値」と呼ぶことにしましょう。 xは一度しか評価されていないので、ここからxと呼ぶことは望ましくありません。
  2. x値が(trueに強制変換)truthy であれば、nmatrix.lengthを割り当てます。それ以外の場合は、x値をnに割り当てます。

x[]であれば、例えば、コードは、同じ空の配列xを行い、n(割当後matrix.length0にセットを指すようにmatrixを設定します。他の例(あなたがあなたの質問を編集した前に、私はこれらを書いた)x"foo"であれば、それは"foo"matrixを設定し、3nを設定します(matrixlength)。 x""(falsy値)である場合、それはmatrix""およびセット""n設定します。 x{foo:"bar"}の場合は、同じオブジェクトを参照するようにmatrixを設定し、オブジェクトにはlengthというプロパティがないため、nundefinedと設定します。あなたはその考えを得る。

上記の#2は、&&が単なる論理AND演算子ではないためです。このようなa && b作品:

  1. は、その値を取得するためにaを評価。 bを評価し、&&オペレータ

の結果ということにする、のはそれ以外の
  • -値が falsyであれば、 &&オペレータの結果は値である
  • 値という呼びましょう

    "真偽値"は、 "偽"でない値です。偽値は、0,null,undefined,,NaN、もちろんfalseです。

  • +0

    JavaScriptのtruthy/falsey値について話す際に参考になる参考資料:https://dorey.github.io/JavaScript-Equality-Table/ – vlaz

    +0

    @ T.J.Crowder説明をありがとうございました。 – Saman

    0

    (matrix = x)は、xの変数matrixへの割り当て操作です。ここではxは配列なので、この演算の結果は真理値を与え、したがって後の部分が起こります。

    など。場合

    は動作しませんので、(matrix = x)は偽の操作です。 nにはundefinedが割り当てられます(値はxなので)。

    +1

    "'(matrix = x) 'は偽演算です.nは' undefined'のままで、これは誤解を招くことがあります - 'n'は未定義ではないので' undefined'値が割り当てられます。もしも 'x'が' '' 'と等しければ、' 'n''は' '' 'になり、' 'n''が値を持っていれば' 'undefined''になります。割り当てによって値が変更されますが、具体的な例では以前と同じ値に変更されます。 – vlaz

    +0

    @Vldを間違えて訂正。私の悪い。 '(matrix = x)'演算が偽値を返す場合、 'n'は' undefined'値に代入されます。更新されます。 – Ayan