teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

修正

2019/08/22 01:11

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -87,6 +87,9 @@
87
87
  $arr[0]("b");
88
88
  ```
89
89
 
90
+ もはや「配列」って便宜上そう呼んでいるだけで
91
+ そもそも[オブジェクトって「モノ」そのもの](https://wa3.i-3-i.info/word1119.html)なので
90
- もはや「配列」って便宜上そう呼んでいるだけでプログラミング言語上は正しくは「全てオブジェクト」ということなのかなと思いました
92
+ プログラミング言語上は正しくは「全てオブジェクト」ということなのかなと思いました
93
+ (あくまで今回検証した範囲で。私自身も知らない言語の方が多いので言語毎に概念や表現をドキュメントで確認する必要はあります)。
91
94
 
92
95
  [C言語](https://github.com/php/php-src/blob/master/ext/standard/array.c)もちゃんと勉強しようかなと思った今日この頃です。

6

修正

2019/08/22 01:11

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -24,7 +24,7 @@
24
24
  newはご存知かもしれませんが、オブジェクトをインスタンス化する演算子です。
25
25
 
26
26
  オブジェクトなので、いわゆる連想配列の特徴である「添え字」とは呼びません。
27
- [プロパティ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new#Description)です。
27
+ [プロパティ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors)です。
28
28
  (いうなれば属性名と属性値のペアの集まりです)
29
29
 
30
30
  ```js

5

修正

2019/08/22 00:39

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  let arr = new Array();
21
21
  ```
22
22
 
23
- 様々なオブジェクト指向で出てくる[new](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new)ですね。
23
+ 様々なオブジェクト指向言語で出てくる[new](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new)ですね。
24
24
  newはご存知かもしれませんが、オブジェクトをインスタンス化する演算子です。
25
25
 
26
26
  オブジェクトなので、いわゆる連想配列の特徴である「添え字」とは呼びません。

4

修正

2019/08/22 00:37

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -2,10 +2,91 @@
2
2
  オブジェクトが「他の言語で言う連想配列のように使える」だけです。
3
3
  - [オブジェクト初期化子
4
4
  ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)
5
+ 「構文」のところを参照
5
6
 
7
+ もっと言えば「配列」もオブジェクトです。
8
+ > [Array](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array)
6
- [javascript オブジェクト 連想配列 違い]調べれば幾らも解説記事がでてきます。
9
+ JavaScript の Array オブジェクトは、配列を構築するためのグローバルオブジェクト、配列とは複数の要素の集合を格納管理するリスト構造です。
7
- それで調べて納得できないならその記事を例に挙げて質問してください。
8
- コードだけポンと置かれた場合、他者は「自分で書いたコード」と認識します。
9
10
 
11
+ 初期化は確かにこのように書かれることが多いです。
12
+ ```js
10
- 低評価理由コメント願います。
13
+ let obj = {};
14
+ let arr = [];
15
+ ```
16
+ ただこれはあくまで[リテラル](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%86%E3%83%A9%E3%83%AB)であり、丁寧に書くとこうなります。
17
+
18
+ ```js
19
+ let obj = new Object();
20
+ let arr = new Array();
21
+ ```
22
+
23
+ 様々なオブジェクト指向で出てくる[new](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new)ですね。
24
+ newはご存知かもしれませんが、オブジェクトをインスタンス化する演算子です。
25
+
26
+ オブジェクトなので、いわゆる連想配列の特徴である「添え字」とは呼びません。
27
+ [プロパティ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new#Description)です。
28
+ (いうなれば属性名と属性値のペアの集まりです)
29
+
30
+ ```js
31
+ let obj = {};
32
+ obj.hoge = "a";//プロパティ
33
+ ```
34
+
35
+ ただ、リテラルとしても記述が可能であるため、連想配列”のような”アクセスの仕方が可能となっているだけです。
36
+ ```js
37
+ let obj = {};
38
+ obj.hoge = "a";
39
+ console.log(obj); //{ hoge: 'a' }
40
+ console.log(obj.hoge); //a
41
+ console.log(obj["hoge"]); //a
42
+ ```
43
+
11
- きちんと技術的に指摘いただけたら助かります。
44
+ オブジェクトなので、メソッドも持てます。
45
+ ```js
46
+ let obj = {};
47
+ obj.fnc = function(a){
48
+ console.log(a); //b
49
+ }
50
+ obj.fnc("b");
51
+ ```
52
+
53
+ ちなみに`{}`のところを`[]`にして確認してみても結果としては”ほぼ”同じです。
54
+ ObjectかArrayかの違いだけですね。
55
+ ```js
56
+ let arr = [];
57
+ arr.hoge = "a";
58
+ console.log(arr); //[ hoge: 'a' ]
59
+ console.log(arr.hoge); //a
60
+ console.log(arr["hoge"]); //a
61
+ arr.fnc = function(a){
62
+ console.log(a); //b
63
+ }
64
+ arr.fnc("b");
65
+ ```
66
+
67
+ 私自身もObjectとArrayの完全な使い分けができるほど使い込んでいるわけではありません。
68
+ どこかで拾ってきたような言葉を借りるようになりますが、私もおおよそ下記のように考えています
69
+
70
+ - 数値だけが順番にならんでいるようなデータならArrayが適切
71
+ - データをまとめて扱うならObjectが適切
72
+ - 表のように複数のレコードを扱うならArray+Object
73
+
74
+ ------
75
+
76
+ 蛇足:
77
+ ちなみに今回色々試していく中で「あ、こんなこともできたのか」と知ったことがあるのでついでに書いておきます。
78
+ ```PHP
79
+ <?php
80
+ $arr = [];
81
+ $arr[] = function($a){
82
+ echo $a;
83
+ };
84
+ $arr[] = "v";
85
+ var_dump($arr);
86
+
87
+ $arr[0]("b");
88
+ ```
89
+
90
+ もはや「配列」って便宜上そう呼んでいるだけでプログラミング言語上は正しくは「全てオブジェクト」ということなのかなと思いました。
91
+
92
+ [C言語](https://github.com/php/php-src/blob/master/ext/standard/array.c)もちゃんと勉強しようかなと思った今日この頃です。

3

低評価されたかたはきちんとご指摘ください。改善いたします

2019/08/22 00:37

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -5,4 +5,7 @@
5
5
 
6
6
  [javascript オブジェクト 連想配列 違い]で調べれば幾らでも解説記事がでてきます。
7
7
  それで調べて納得できないならその記事を例に挙げて質問してください。
8
- コードだけポンと置かれた場合、他者は「自分で書いたコード」と認識します。
8
+ コードだけポンと置かれた場合、他者は「自分で書いたコード」と認識します。
9
+
10
+ 低評価理由コメント願います。
11
+ きちんと技術的に指摘いただけたら助かります。

2

修正

2019/08/21 11:44

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,7 +1,7 @@
1
- JavaScriptにそもそも「連想配列」という概念はありません。
1
+ JavaScriptにある`{}`は**オブジェクト**でそもそも「連想配列」という概念はありません。
2
- 他の言語で言う「連想配列」を「オブジェクト」と呼んでいます。
3
-
4
2
  オブジェクトが「他の言語で言う連想配列のように使える」だけです。
3
+ - [オブジェクト初期化子
4
+ ](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer)
5
5
 
6
6
  [javascript オブジェクト 連想配列 違い]で調べれば幾らでも解説記事がでてきます。
7
7
  それで調べて納得できないならその記事を例に挙げて質問してください。

1

低評価理由をコメント願います。

2019/08/21 01:12

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,4 +1,8 @@
1
1
  JavaScriptにそもそも「連想配列」という概念はありません。
2
2
  他の言語で言う「連想配列」を「オブジェクト」と呼んでいます。
3
3
 
4
+ オブジェクトが「他の言語で言う連想配列のように使える」だけです。
5
+
4
- [javascript オブジェクト 連想配列 違い]で調べれば幾らでも解説記事がでてきます。
6
+ [javascript オブジェクト 連想配列 違い]で調べれば幾らでも解説記事がでてきます。
7
+ それで調べて納得できないならその記事を例に挙げて質問してください。
8
+ コードだけポンと置かれた場合、他者は「自分で書いたコード」と認識します。