3

私はJavascriptを学んでいますが、なぜこの行がこのように書かれているのかわかりません。javascriptがこのようなコードを書いている理由を誰かが説明できますか?

とはcinnamon && (this.cinnamon = [1, "stick", "Saigon"])どういう意味ですか?
その上の最初の行を理解しています。2 行目は && を使用して比較演算子を実行しているようですが、変数に割り当てていません。

      var VanillaBean = function(vanilla, cinnamon) {
      this.vanilla = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"];
      cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);  //?????
    };
    VanillaBean.prototype = {
      heavyCream: [1, "cup", "Organic Valley"],
      halfHalf: [2, "cup", "Organic Valley"],
      sugar: [5/8, "cup"],
      yolks: [6]
    };
    var vanilla = new VanillaBean("Tahitian", true);
    console.dir(vanilla);
4

2 に答える 2

9

この線:

cinnamon && (this.cinnamon = [1, "stick", "Saigon"]);

以下と同等です。

if (cinnamon) {
    this.cinnamon = [1, "stick", "Saigon"];
}

結果のコードは完全なステートメントよりも短いため、論理演算子の短絡的な性質がこのように使用されることがあります。ANDif

とはいえ、このようなコードを書くことは、ifステートメントよりも読みにくく、保守しにくいため、個人的にはお勧めできません。

于 2013-09-05T08:32:22.470 に答える
2

論理 && 演算子は「怠惰」で、最初の式が true の場合にのみ 2 番目の式を評価します。それは同等ですif(cinnamon){ this.cinnamon=[...];}

同様には、OR を評価するときに、最初の式が false の場合にのみ 2 番目の式をテスト (したがって実行) する必要があるため、cinnamon || this.cinnamon=[...];同等です。補数から最もよく理解できます。if(!cinnamon){this.cinnamon=[...];}

(false && anything)=false なので、わざわざ 2 番目のスイートを実行する必要はありません

(true || anything)=true なので、わざわざ 2 番目のスイートを実行する必要はありません

于 2013-09-05T08:34:13.067 に答える