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

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

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

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

Q&A

解決済

2回答

549閲覧

なぜ配列は任意の文字列を添字にできるのか

ypp

総合スコア66

JavaScript

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

1グッド

0クリップ

投稿2023/02/21 19:07

配列は0始まりで数値のインデックスを付けられますが、配列の添字に文字列を使用してもエラーにはなりませんでした。以下のようなプログラムです。

js

1let array = ["data1", "data2", "data3"]; 2array["anystring"] = "data0"; 3console.log(array.anystring); // data0 4console.log(array); // ['data1', 'data2', 'data3', anystring: 'data0'] 5console.log(array.length); // 3

まず、この時点でエラーが出ないことが疑問です。配列なのに連想配列として使えるのは納得できません。
MDNもみましたが、そこには「JavaScriptの配列は連想配列ではありません」とはっきりと書かれており、ページ内には私が疑問に思っていることが書かれていないのです。
どなたか、配列で連想配列としての機能が使える理由を教えていただけませんでしょうか?

Zuishin👍を押しています

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

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

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

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

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

hoshi-takanori

2023/02/21 19:39

JavaScript では配列や関数もオブジェクトで、実は任意のプロパティを追加できるし、例えば map などのメソッドの上書きもできるような。(要出典)
m.ts10806

2023/02/21 19:56 編集

概念とか仕様の話なので、MDNに書かれている以上の情報が出てくることはないような。 ひとまず、連想配列ではなく、実はプロパティというのが答えのように思いますが。。
guest

回答2

0

すでにあるようにArrayはObjectだからですね
オブジェクトである以上プロパティを持てるのは仕様です

javascript

1const a=[]; 2console.log(a instanceof Array); // true 3console.log(a instanceof Object); // true

この場合イテラブルな配列の性質とそうではないオブジェクトの性質が両方あるので参照の仕方によって得られる値が変わってきます

javascript

1const a=[1,2,3]; 2a.test=100; 3for(let i of a) console.log(i); // 1 2 3 4for(let i in a) console.log(a[i]); // 1 2 3 100

投稿2023/02/22 01:41

yambejp

総合スコア116176

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

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

ypp

2023/02/22 14:14

なんとな~く、理解できました。
guest

0

ベストアンサー

配列なのに連想配列として使えるのは納得できません。

ArrayObjectを継承するよう規格で決められていますので、配列オブジェクトを連想配列として利用することは可能です。納得いかなくてもそういう規格なので受け入れてください。

「JavaScriptの配列は連想配列ではありません」

おそらく、配列リテラル内の項目や Array のメソッドで追加した項目など、通常の配列操作でできた項目は連想配列とは扱いが違うよ、と言いたいんじゃないでしょうか。

投稿2023/02/21 21:36

int32_t

総合スコア21525

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

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

ypp

2023/02/22 14:13

なんとな~く、理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問