• ベストアンサー

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

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

  • re97
  • お礼率80% (601/744)

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

  • ベストアンサー
  • 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

  • オブジェクトリテラルの使い道

    オブジェクトリテラルはどのように使われることが多いのでしょうか? new でインスタンス作ることができませんし、 やっぱりコンテナとして使われることが多いですか?

  • 生成する際、オブジェクトリテラルに引数を渡すには?

    ■前提 function Man(name) {  this.aisatu = function() {   alert('こんにちは' + name);  } } var man = new Man('伊藤'); man.aisatu(); ・上記をオブジェクト・リテラルに書き直してみたいのですが、どう書けば良いのでしょうか? ・とりあえず下記のようにしてみたのですが、これだと引数として'伊藤'が渡されていないので、なるべく上と同じ内容で、オブジェクト・リテラルに書き直したいです var man = {  name : "伊藤",  aisatu : function () { alert('こんにちは' + this.name) } }; man.aisatu();

  • プログラミングで.ドットは演算子だから、オペランド

    プログラミングで.ドットは演算子だから、オペランド?される文字を操作operateするということですか? つまりくっつける文字列演算子+やマイナスのように。

  • javascriptを只今勉強中なのですが、オブジェクトについてこんが

    javascriptを只今勉強中なのですが、オブジェクトについてこんがらがってしまいました。 var obj = new Object(); var obj2 = {}; Object.prototype.prop1 = "hoge"; obj,obj2共にprop1にhogeがセットされるのですが、オブジェクトリテラルのobj2は Objectコンストラクタのインスタンスと解釈できるのでしょうか?? new演算子について色々とfirebugで調べていたところこの疑問が出てきました。 newなしでもインスタンスができるのでしょうか? オブジェクトを理解していないので意味不明な質問かもしれませんが どなたかアドバイスいただけると嬉しいです。

  • javascriptのObject()コンストラクタについて質問です。

    javascriptのObject()コンストラクタについて質問です。 var obj = new Object(); var obj2 = Object(); console.log(obj === obj2)//false いつも質問ばかり恐縮です。。。 どこかのサイトでこの2つは等価みたいな記事を読んだような気がするのですが、 ということはObjectコンストラクタでオブジェクトを作る際はnew演算子は要らない?? のでしょうか?? またobjとobj2の2つの違いを色々試したのですが違いがわかりません。new演算子を 付けたインスタンスと付けないインスタンス??の違いをどなたか ご教授いただけると助かります。

  • Accessのクラスオブジェクトについて、スコープ演算子は利用可能でし

    Accessのクラスオブジェクトについて、スコープ演算子は利用可能でしょうか? 利用可能な場合、どのバージョンから利用可能でしょうか? 宜しくお願い致します。

  • 演算子について

    量子化学での運動量演算子とハミルトニアン演算子の違いはあるんでしょうか?違いがあるならシュレーディンガー方程式に作用させた時にどのような違いが出てくるか教えてください

  • リトルジラフ(LITTLE GIRAFFE)のブランケットについて

    5月に出産予定の友人への出産祝いのため、リトルジラフ(LITTLE GIRAFFE)のベビーブランケットの購入を検討しています。 リトルジラフには数種類、素材の違いがあるようで 「Chenilleシェニール」か、「Luxeリュクス」のドットブランケットで迷っているのですが、どちらがよろしいでしょうか。  http://www.baby-rose.jp/sleep/little_g.html 生まれる季節を考えて通年使えるシェニールのほうがよいかと思うのですが、リュクスも暖かそうで決断できずにいます。。 実際にご使用されてる方がいれば、使い心地等教えていただけるとうれしいです!

  • 演算子is... 初学者 Python 3

    毎度おせわさまです。Pythonに関する質問です。 今回は演算子isについて。 ネット上の初心者むけサイトで独学に励んでいるのですが、演算子isは、左辺と右辺のオブジェクトが同じオブジェクトだった場合には「True」を返します、とありました。 変数を、 str1 = "555" str2 = "555" として、 print str1 == str21 #1 print str1 is str2 #2 とすると #1は、オブジェクトの値が同じなのでTrueを返すが、#2はオブジェクトが同一ではないのでFalseを返す、と。 なるほど、なるほど。と思いながら実際に書いてみると、#1も#2もTrueを返すのですが・・・・・ バージョンの違いでしょうか?なんでしょうか???今使ているのはPython2.7です。 ご回答よろしくお願いいたします。

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------