あるスクリプトを見ていたら、 obj = obj0 && obj1 || obj2; if(obj.prp)//obj.prpがtrueの場合の処理 みたいな書き方をしていて、「何だ、こりゃ?」と思った。 ひょっとして、「if(obj0 && obj1 && obj2)みたいに展開されるんだろうか?」とも思ったが、 ドット演算子(.)の意味とか考えてもそれはおかしいと思って、 ECMAスクリプトの仕様書の邦訳を見てみたら、 このような注釈があった。 && 演算子、また || 演算子の生成する値が Boolean 型である必要はない。 生成される値は常に、 2 個の項式のうちの 1 つの値である。 結局こうなるということらしい。 値1&&値2 値1がfalseなら値1が評価される。値1がtrueなら値2が評価される。 値1||値2 値1がtrueなら値1が評価される。値1がfalseなら値2