
パーフェクトjavascriptの124pでドット演算子とブラケット演算子の違いについて説明しているところで、
些末な話ですが**プロパティアクセスの演算対象は変数ではなくオブジェクトの参照です。これは次のようにオブジェクトリテラルに直接演算可能**なことで確認できます。
```javascript
({x:3,y:4}).x;//3
({x:3,y:4})["x"];//3
```
実際にオブジェクトリテラルに演算する機会はほとんどありませんが、メソッドチェーンなどの形で、演算対象が変数ではない形式を目にすることは普通にあります。
とありました。
この**プロパティアクセスの演算対象は変数ではなくオブジェクトの参照です。これは次のようにオブジェクトリテラルに直接演算可能**の意味がいまいち理解できませんでした。
括弧内にx:3、x:yを持つ関数に接続した時の演算対象は、変数ではなくオブジェクトの参照、とはかみくだいて説明するとどのようになりますか。またオブジェクトの参照というのは、つまりオブジェクトのアドレス(メモリ上の参照値)のことでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
a=({x:3,y:4});
として a.x (3が取り出される)とすることと
({x:3,y:4}.x
は全く等価ということ。
参照というのはポインタと考えておいて問題なし。但しメモリーアドレスかどうかは
エンジンの実装次第。オブジェクトのアドレスの並ぶテーブルのインデックス
というのもポピュラーな実装です。知る必要は有りませんが⚪⚪⚪
No.2
- 回答日時:
この質問は過去に何度か見たので参考までに。
https://teratail.com/questions/62648
https://teratail.com/questions/64078
https://detail.chiebukuro.yahoo.co.jp/qa/questio …
Re: gooooooooooooooooo さん
No.1
- 回答日時:
その認識でよろしいと思います。
プロパティーアクセスの対象について仕様書を見ると、
オブジェクトリテラルに直接演算可能なのは仕様書に明記されています。
ECMAScript® 2016 Language Specification
12.3.2 Property Accessors
https://www.ecma-international.org/ecma-262/7.0/ …
MemberExpression . IdentifierName
MemberExpression は PrimaryExpression であり ObjectLiteral であり {PropertyDefinitionList} である
処理エンジンの実装がどうなっているかは推測するしかありませんが、
一般的に JavaScript のオブジェクトが生成されると、
すべてヒープ領域に格納され、その場所のアドレス等を参照値として後続処理に渡されます。
値渡しされることはなく、すべて参照渡しなので、
以下はすべて区別することなく、プロパティーアクセスが可能です。
* オブジェクトリテラル → ヒープ領域にオブジェクト内容を格納して、その場所の参照値を返すため
* オブジェクトを格納した変数 → 参照値が入っているため
* オブジェクトを戻す関数の呼び出し処理 → 参照値が戻るため
* new 演算子で生成したオブジェクト → ヒープ領域にオブジェクト内容を格納して、その場所の参照値を返すため
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- その他(自然科学) 論文のまとめに関して(小論文)添削お願いします。 6 2023/07/16 14:24
- Excel(エクセル) エクセル開いたらウィンドウがでました 2 2023/03/28 16:24
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Illustrator(イラストレーター) イラストレーターの面積を求める 1 2022/04/17 11:05
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- その他(プログラミング・Web制作) Pythonのデータ型 2 2023/04/26 12:53
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Oracle 参照関係のフィールドについて 1 2023/05/27 17:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBAにて動的にCheckBOXを...
-
EXCELのドロップダウンリストに...
-
bmp画像をjpegやpng画像に圧縮...
-
int + Integer
-
インスタンスとオブジェクト 生成
-
デザインパターンとは?
-
パワーポイントのVBAでテキスト...
-
複数シートの選択
-
オブジェクトの参照とは
-
ページのソースを動的に書き換...
-
CFileDialogでフォルダだけを選...
-
C++で*thisは何を指しているの...
-
java.io.Serializableとは何で...
-
Object型からDouble型へのキャスト
-
ワイルドカード<?>と型パラメー...
-
C言語の「->」の意味
-
クラスと構造体
-
ATL CWorkerThread
-
XAMLの動的生成について
-
COMコンポーネントって何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
VBA 同じ名前のオブジェクトを...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
Object型からDouble型へのキャスト
-
時間帯判定をする。
-
newは明示的にした方が良いのか?
-
戻り値がクラスオブジェクト
-
ワイルドカード<?>と型パラメー...
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
多人数のじゃんけんプログラム
-
Rangeオブジェクトを一時的に作...
-
ワードで画像をドロップすると...
おすすめ情報