• ベストアンサー

ドット演算子、オブジェクトリテラル、ブランケットの

「ドット演算子」「オブジェクトリテラル」「ブランケット」違いを教えてください 大きく「オブジェクトリテラル」と「ドット演算子」という2つのやり方があって、 「ブランケット」は、「ドット演算子」の違う書き方という位置付けなのでしょうか? つまり、「ドット演算子」は「ブランケット」で書き換えられるけど、 「オブジェクトリテラル」は「ブランケット」で書き換えられない?

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

No.1補足の質問について 以下は記法が違うだけで、すべて同じ処理です。 言語的に美しくない状況ですが、時代背景とともに増えていったのでしょうか。 var a = new Object(); // 基本 var a = {}; // 省略化の記法 (JS1.2) var a = Object.create(Object.prototype, {}); // 高等化した記法 (ES5) -- JavaScript でオブジェクト初期化子、とは聞き覚えの無い単語でしたが、 調べてみると仕様書の章題に使ってありましたね。 C++のころからある伝統的な名称のようです。 Standard ECMA-232 5.1 Edition 11.1.5 Object Initializer この中でオブジェクト初期化子は、「オブジェクトリテラルで記載する」云々とあり、 以下の様に文法が定義されています。 ObjectLiteral :  { } ← 中身が無くてもオブジェクトリテラル  { PropertyNameAndValueList } ← 中身が有ってもオブジェクトリテラル  { PropertyNameAndValueList , } ← 文法的にどうかと思うがオブジェクトリテラル というわけで、 一般概念である「オブジェクト初期化子」を実現する為に JavaScriptでは「オブジェクトリテラル」の記法を使用します。

re97
質問者

お礼

回答ありがとうございました。 わざわざ調べていただいたみたいで、恐縮です。 >var a = Object.create(Object.prototype, {}); // 高等化した記法 (ES5) これ初めて知りました。 大変参考になりましたー >余談ではありますが、「ブランケット」だと別の物を連想してしまいますのでご注意ください アドバイスありがとうございましたー。気をつけたいと思いますー

その他の回答 (1)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

ドット記法とブラケット記法は、メンバー演算子の記法の違いでしかありません。 これは JavaScript のオブジェクトが本質的に連想配列であることに由来します。 var a = 変数['プロパティ']; // 上下の記法は同じ意味 var a = 変数.プロパティ; オブジェクトリテラルとは、オブジェクトの生成と初期化を簡略化した記法です。 つまり new 演算子と複数のメンバー演算子の組み合わせを一つの記法でまとめた物です。 var a = new Object(); a.abc = 'value'; a.['0120'] = 123; // 上下の記法は同じ意味 var a = {abc:'value', '0120':123}; というわけで、 「ドット記法」は「ブラケット記法」で書き換え可能。 「オブジェクトリテラル」は「new演算子」と「メンバー演算子」で書き換え可能。 余談ではありますが、「ブランケット」だと別の物を連想してしまいますのでご注意ください。 http://www.google.co.jp/search?tbm=isch&q=blanket+linus

re97
質問者

補足

回答ありがとうございました。 説明大変分かりやすかったです。 追加で2つ教えてください。 ■質問1 var a = new Object(); と var a = { }; は同じ意味でしょうか ■質問2 ・「オブジェクト初期化子」「オブジェクトリテラル」の違いが分からないのですが、 「オブジェクト初期化子」とは { } のことで、この中に「○○:★★」形式で何か入っていたら「オブジェクトリテラル」ということなのでしょうか?

関連するQ&A