2014JavascriptQiitaアドベントカレンダー2014の22日目で書いた記事の解説です。HTMLファイ部の岩淵がお送りする、falseのようなtrueの話シリーズの第1弾です。今回はObjectオブジェクトのお話です。JavaScriptの不思議な振る舞いをクイズ形式で出題します。左辺と右辺それぞれのObject()のリテラル({})で別のインスタンスが生成されているので、同じように見えて等値ではありません。値を比較しているというより、アドレスを比較していると考えた方がよいでしょう。プリミティブと参照の違いはJavaScriptを扱う上で避けては通れません。{};そもそもこれは文法エラーになるので注意しましょう。true解説まず注意。これを見て、「ハッシュのキーにオブジェクトを入れられるんだ!」と勘違いしてはいけません。Chromeの場合)。3ほら、キーはwindowオブジェクトそのものではありません。先ほどの問題と似ていますね。このコードではブラケット表記とドット記法の2種類を使っています。後者のobj.windowはobj['window']と書くのと同じです。前者と後者でキー文字列が違うので、等値になりません。true解説これも第2問を理解していれば難しくありませんね。Object]']と書くのと同じです。true解説Boolean(0)の値はfalseですが、この問題のコードではBooleanオブジェクトのインスタンスを生成しています。インスタンスはObject型のオブジェクトです。"object"です。オブジェクトはtruthyな値なので、二重否定をしたらtrueになります。true解説オブジェクトのキーはArrayと違って、キーの順番が関係ないと思っていませんか?この問題のコードでは、オブジェクトのキーをfor文内で連結して、キーを文字列として連結しています。1;のように後から追加したプロパティーは、末尾に追加されていきます。2;のようにプロパティーを書き換えた場合は順番は変わらないようです。この挙動はEcmaScriptの仕様上は保証されないので、あくまでもブラウザーの実装依存となります。これでJavaScriptの雑学が増えれば幸いです。SocialAnimationinfomisc.当サイトは、ブラウザのJavaScript設定を有効にしてご覧ください。