タグ

JavascriptとECMAに関するyifeのブックマーク (2)

  • 論理積と論理和で代入する値を選択する

    あるスクリプトを見ていたら、 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

    yife
    yife 2012/07/31
    "とりあえず、&&でつないで代入すると、最初にfalseになった値か最後の値を代入でき、 ||でつないで代入すると、最初にtrueになった値か最後の値を代入できるという感じです。" なにそれ知らなかった
  • [ ] == ![ ] の謎を自分でも解いてみた - Web系がおもしろい。

    alert( [ ] == ![ ] ); /* true */ っていうのはよくJavaScriptのWTFネタとしてよく見るんですが、その仕組みについて深く追いかけたことがありませんでした。 そいで今日、 さっきのがなんでtrueになるのか忘れた…あれー。参照が同一であるかをみるのは、両者ともにObject型だったときのみだったっけ… とツイートしたところ、id:efcl(@azu_re) さんから @esperia09 http://d.hatena.ne.jp/otn/20100222/p1 参照を見るのは=== と、回答を頂いたので、せっかくですし詳しく調べてみることにしました! 問題となる式 alert( [] == ![] ); // true !つけてんのになんでtrueやねん!っていう、ちょっと分かりにくい"仕様"です。(バグじゃないよ!) まずは、この評価がどういう判断

    [ ] == ![ ] の謎を自分でも解いてみた - Web系がおもしろい。
  • 1