質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

475閲覧

javascriptにおけるオブジェクトリテラルとは?オブジェクトのプロパティもオブジェクト?

blendegg

総合スコア81

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/06/15 03:57

オブジェクトリテラルの意味がよくわからないんですが、引数としてイコールで結んだ式を直接記述することが出来ないから、{}で囲んだ記法を用いるということですか?
イコールの中にイコールは入れられない場合に使うという認識です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/15 04:12 編集

どこで出てきた語句でしょうか 出典明示してください
int32_t

2021/06/15 04:29

質問の意味が不明瞭です。具体的な例を挙げてみてください。
think49

2021/06/15 04:36

> オブジェクトのプロパティもオブジェクト? オブジェクトである必然性はありません。
blendegg

2021/06/15 05:00

>>think49さん 例えば以下のような記述を見かけます。 {object.textContent:"てきすと"} これは以下と同義ではないのかと思いました。 object.textContent = "てきすと";
int32_t

2021/06/15 06:02 編集

> {object.textContent:"てきすと"} JavaScriptでそのような書き方はしないですね。オブジェクトリテラル内のプロパティ名に . は入れられません。どこで見かけましたか? 「object = {textContent: "てきすと"}」のことでしょうか?
blendegg

2021/06/15 08:15

https://teratail.com/questions/343347 過去の質問でもらったコードになります。 {}でオブジェクトを初期化するということですが、textContentプロパティのこともオブジェクトと呼ぶのでしょうか?
int32_t

2021/06/15 08:31 編集

> https://teratail.com/questions/343347 こちらを見てようやく質問文の1文目の意味が理解できた気がします。 2文目はまだ意図不明です。「イコールの中にイコール」とはなんのことでしょう。 > textContentプロパティのこともオブジェクト textContentは文字列プロパティで、文字列もオブジェクトの一種と言えますが、オブジェクトリテラルで作るObjectとは関係ありません。
blendegg

2021/06/15 08:49

二行目は間違いでした。 オブジェクトリテラルで作るobjectは箱、のことですよね? {textContent:x.textContent} ↑この記述で、オブジェクトの作成とプロパティの設定を同時に行っているという認識でいいのでしょうか?
guest

回答2

0

ベストアンサー

オブジェクトリテラルの意味がよくわからないんですが、引数としてイコールで結んだ式を直接記述することが出来ないから、{}で囲んだ記法を用いるということですか?

はい、おおむね、そうです。

ただし、「引数としてイコールで結んだ式を直接記述することが出来ないから」というのは正しくないです。書こうと思えば書けます。

代入式は代入値が式の評価結果となるので、プロパティへの代入の結果としてオブジェクトを得ることができません。(変数を介してカンマ演算子でいくつかの式を書けばできないこともないですが)
ご提示の質問のコードは、1行で書くために、Object.Asign()とオブジェクトリテラルを使っているのだと思います。


少しトリッキーなコードだと思います。一般的ではないように感じます。
私見ですが、素直にプロパティに代入したほうが可読性がいいように思えます。


なお、オブジェクトリテラルの使い道の(まれな)ひとつである、ということに注意してください。
つまり、「引数としてイコールで結んだ式を直接記述することが出来ないから、オブジェクトリテラルで書いた」のであって、逆の「オブジェクトリテラルで書かれているから、引数としてイコールで結んだ式を直接記述することが出来ない」は、まったく成り立ちません。

投稿2021/06/15 14:19

Lhankor_Mhy

総合スコア36147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

引数としてイコールで結んだ式を直接記述することが出来ないから、

イコールで代入文を書けるかどうかはまったく関係ありません。

たとえばある関数 f() が「textContentというプロパティを持つObject」を引数として必要としているとしたら、どんな手段でもよいので「textContentというプロパティを持つObject」を用意して渡せばよいのです。f(obj) のように既に変数に入っている値を渡してもよいですし、f(g()) のように別の関数の戻り値を渡してもよいですし、f({textContent: ""})のようにオブジェクトリテラルでObjectを作って渡してもよいです。もっとも都合の良い手段で渡せばよくて、オブジェクトリテラルを使うのが都合が良ければオブジェクトリテラルを使うだけのことです。

数値を引数として必要とする関数 h() に数値リテラルを指定して h(42) と書くのと同じです。

投稿2021/06/15 10:00

int32_t

総合スコア20987

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問