回答編集履歴

5

修正

2020/07/08 17:15

投稿

kotori_a
kotori_a

スコア687

test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
85
+ そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。(※「1st_key」のように先頭が数字になっているものや途中に空白があるもの等は引用符を省略できません)
86
86
 
87
87
  つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
88
88
 

4

追記

2020/07/08 17:15

投稿

kotori_a
kotori_a

スコア687

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  ただ、pythonでも、can110さんが結果を書いているように
32
32
 
33
- ```
33
+ ```lang-python
34
34
 
35
35
  v = "keystr" # <=文字列なら何でもいいです。
36
36
 
@@ -62,11 +62,11 @@
62
62
 
63
63
  ### javascript:「オブジェクト」との関係、ラクに速くスクリプトを書けること
64
64
 
65
- javascriptにおけるa = {v: 3}というのは、オブジェクト作成です。
65
+ javascriptにおけるa = {v: 3}というのは、オブジェクトに対するプロパティ定義です。
66
66
 
67
67
  これは
68
68
 
69
- ```
69
+ ```lang-javascript
70
70
 
71
71
  var a = new Object();
72
72
 
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- そして、キー位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
85
+ そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
86
86
 
87
87
  つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
88
88
 
@@ -96,7 +96,7 @@
96
96
 
97
97
 
98
98
 
99
- javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符をく手間をなくしている(と私は推測しています)
99
+ javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符をく手間をなくしている(と私は推測しています)
100
100
 
101
101
 
102
102
 
@@ -104,23 +104,39 @@
104
104
 
105
105
  引用符のペアをそろえていないとエラーになりますし、
106
106
 
107
+ ```lang-javascript
108
+
107
109
  var myBox = new Object;
108
110
 
109
- myBox = {front:{color:{type:'high', 'code':'#ffffff'}}};
111
+ myBox = {front: {color: {type: 'high', 'code': '#ffffff'}}};
112
+
113
+ ```
110
114
 
111
115
  というように、プロパティを引用符なしで定義でき、
112
116
 
117
+ ```lang-javascript
118
+
113
119
  c = myBox.front.color.code;
114
120
 
121
+ ```
122
+
115
123
  と引用符なしでプロパティにアクセスできるのは便利です。
116
124
 
117
125
 
118
126
 
119
- なお、変数として使えない文字列は、引用符なしでプロパティとしてくこはできいようです。
127
+ pythonで外部ライブラリを使わず普通に辞を使うとなると
120
-
128
+
121
- 例えば{1a:"abc”}や{This is a pen:"my_pen"} はエラーになります。
129
+ ```lang-python
122
-
130
+
123
- それぞれ{"1a":"abc”}や{"This is a pen":"my_pen"} と書かなくてはなりません。
131
+ myBox = {"front": {"color": {"type": "high", "code": "#ffffff"}}}
132
+
133
+ c = myBox["front"]["color"]["code"]
134
+
135
+ ```
136
+
137
+ とする必要があります)
138
+
139
+
124
140
 
125
141
 
126
142
 
@@ -136,7 +152,7 @@
136
152
 
137
153
  そのかわり、javascriptと異なり、未定義の変数に該当する文字列を文字列としてのキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
138
154
 
139
- pythonはjavascriptよりも辞書の記述に手間がかかる・・・
155
+ pythonの辞書はjavascriptのオブジェクトに比べると、記述に手間がかかる・・・
140
156
 
141
157
 
142
158
 
@@ -148,7 +164,7 @@
148
164
 
149
165
  javascriptの例のように 
150
166
 
151
- var v = "keystr" としたあとで var a={v:3}としたら
167
+ var v = "keystr" としたあとで a={v:3}としたら
152
168
 
153
169
  aは{"keystr":3} ではなく、 {"v":3}‘となってしまうのは、直感に反するような気がしませんか?
154
170
 
@@ -156,7 +172,7 @@
156
172
 
157
173
  辞書のキーに(hashableなものに限りますが)変数を指定できるからこそ
158
174
 
159
- ```
175
+ ```lang-python
160
176
 
161
177
  if 64 < i < 64 + 26 + 1:
162
178
 
@@ -170,7 +186,7 @@
170
186
 
171
187
  とか
172
188
 
173
- ```
189
+ ```lang-python
174
190
 
175
191
  s = {chr(i): i for i in range(65, 65 + 26)}
176
192
 
@@ -186,7 +202,23 @@
186
202
 
187
203
 
188
204
 
205
+ ※もちろんjavascriptでも、
206
+
207
+ ```lang-javascript
208
+
209
+ var a = new Object();
210
+
211
+ var k = 'DUMMY';
212
+
213
+ a[k] = 0; //a['DUMMY'] = 0; または a.DUMMY = 0; と同じ
214
+
215
+ ```
216
+
189
- ※もちろんjavascriptでもdict[変数]の形式の連想配列を使うことで同じようなことはできます。
217
+ というように、連想配列を使うことで同じようなことはできます。
218
+
219
+
220
+
221
+ pythonでも、[attrdict](https://pypi.org/project/attrdict/)という外部ライブラリを使うことで、辞書をドットでアクセスすることは可能です。
190
222
 
191
223
 
192
224
 

3

javascriptのオブジェクトに関する修正

2020/07/08 17:11

投稿

kotori_a
kotori_a

スコア687

test CHANGED
@@ -1,27 +1,25 @@
1
+ まず前提として、javascriptにおけるa = { v: 3 } というのはjavascriptのオブジェクトに関係している一方、
2
+
3
+ pythonにおける a = { v: 3 } というのはpythonの辞書に関係しており、書き方は似ていますが別物です。
4
+
5
+
6
+
1
- 質問者さんの問題を整理すると、
7
+ そのうえで質問者さんの問題を整理すると、
2
8
 
3
9
  1. javascriptでは、**初出の文字v**に関して
4
10
 
5
-
6
-
7
- var a = { v: 3 }
11
+ var a = { v: 3 };
8
-
9
-
10
12
 
11
13
  を実行しても特にエラーが出ませんが、
12
14
 
15
+
16
+
13
17
  2. pythonでは**未定義の変数v**に対して
14
18
 
15
-
16
-
17
19
  a = {v: 3}
18
20
 
19
-
20
-
21
21
  を実行すると、
22
22
 
23
-
24
-
25
23
  NameError: name 'v' is not defined
26
24
 
27
25
 
@@ -62,15 +60,29 @@
62
60
 
63
61
 
64
62
 
65
- ### javascript、ラクに速くスクリプトを書ける
63
+ ### javascript:「オブジェクト」との関係、ラクに速くスクリプトを書けること
64
+
66
-
65
+ javascriptにおけるa = {v: 3}というのは、「オブジェクト」の作成です。
66
+
67
-
67
+ これは
68
+
68
-
69
+ ```
70
+
71
+ var a = new Object();
72
+
73
+ a.v = 3;
74
+
75
+ ```
76
+
77
+ というように、オブジェクトを作ってから、vというプロパティに値を代入する形でも書けます。
78
+
79
+
80
+
69
- javascriptでオブジェクトの「キー」に使用できるのは、一定の条件識別値か、引用符で囲まれた文字列だけのようです。(間違っていたらすみません)
81
+ javascriptでオブジェクトのプロパティに使用できるのは、一定の条件に該当する識別値か、引用符で囲まれた文字列、もしくは数値に限られるようです。(間違っていたらすみません)
70
-
71
-
72
-
82
+
83
+
84
+
73
- そして、キー位置に置かれた識別値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
85
+ そして、キー位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
74
86
 
75
87
  つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
76
88
 
@@ -78,21 +90,33 @@
78
90
 
79
91
  としたあとで
80
92
 
81
- var a = {v:3}としても
93
+ var a = {v:3};としても
82
94
 
83
95
  aは{"keystr": 3} ではなく、 {"v": 3} になります。
84
96
 
85
97
 
86
98
 
87
- javascriptでは、わざわざ引用符を書かなくてもキーを文字列として扱うことで、引用符を描く手間をなくしている(と私は推測しています)
99
+ javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符を描く手間をなくしている(と私は推測しています)
88
-
89
-
90
-
100
+
101
+
102
+
91
- たった「"」2回といえど、何行も書くとなると結構時間の無駄になりますよね?引用符のペアをそろえていないとエラーになりますし。
103
+ たった「"」2回といえど、何行も書くとなると結構時間の無駄になりますよね?
104
+
92
-
105
+ 引用符のペアをそろえていないとエラーになりますし、
106
+
93
-
107
+ var myBox = new Object;
108
+
94
-
109
+ myBox = {front:{color:{type:'high', 'code':'#ffffff'}}};
110
+
111
+ というように、プロパティを引用符なしで定義でき、
112
+
113
+ c = myBox.front.color.code;
114
+
115
+ と引用符なしでプロパティにアクセスできるのは便利です。
116
+
117
+
118
+
95
- (なお、変数として使えない文字列は、引用符なしでキーとして書くことはできないようです。
119
+ (なお、変数として使えない文字列は、引用符なしでプロパティとして書くことはできないようです。
96
120
 
97
121
  例えば{1a:"abc”}や{This is a pen:"my_pen"} はエラーになります。
98
122
 
@@ -104,7 +128,7 @@
104
128
 
105
129
 
106
130
 
107
- 上の例では、pythonでは一度定義した変数であれば、任意にキーとして指定できるように見えます。
131
+ 上の例では、pythonでは一度定義した変数であれば、任意に辞書のキーとして指定できるように見えます。
108
132
 
109
133
  (繰り返しますが「hashableなものしかキーにできない」という制約はあります)
110
134
 
@@ -116,7 +140,7 @@
116
140
 
117
141
 
118
142
 
119
- でも、この「変数をキーとして指定できる」という仕様は、メリットもあると思います。
143
+ でも、この「変数を辞書のキーとして指定できる」という仕様は、メリットもあると思います。
120
144
 
121
145
 
122
146
 
@@ -130,7 +154,7 @@
130
154
 
131
155
 
132
156
 
133
- キーに(hashableなものに限りますが)変数を指定できるからこそ
157
+ 辞書のキーに(hashableなものに限りますが)変数を指定できるからこそ
134
158
 
135
159
  ```
136
160
 
@@ -162,7 +186,7 @@
162
186
 
163
187
 
164
188
 
165
- ※もちろんjavascriptでも、オブジェクトではなく、dict[文字列変数]の形式の連想配列を使うことで同じようなことはできます。
189
+ ※もちろんjavascriptでも、dict[変数]の形式の連想配列を使うことで同じようなことはできます。
166
190
 
167
191
 
168
192
 
@@ -172,6 +196,8 @@
172
196
 
173
197
  参考にしたもの:
174
198
 
199
+ [MDN オブジェクトでの作業](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Working_with_Objects)
200
+
175
201
  [Python における hashable](https://qiita.com/yoichi22/items/ebf6ab3c6de26ddcc09a)
176
202
 
177
203
  [連想配列を使ったプロパティへの値の代入と参照](https://www.javadrive.jp/javascript/object/index4.html)

2

修正

2020/07/08 16:43

投稿

kotori_a
kotori_a

スコア687

test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
 
72
72
 
73
- そして、キー位置に置かれた識別値は、引用符で囲まなくても、自動的に文字列として解釈されす。
73
+ そして、キー位置に置かれた識別値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
74
74
 
75
75
  つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
76
76
 

1

修正

2020/07/08 16:01

投稿

kotori_a
kotori_a

スコア687

test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- そのかわり、javascriptと異なり、未定義の変数に該当する文字列をキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
113
+ そのかわり、javascriptと異なり、未定義の変数に該当する文字列を文字列としてのキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
114
114
 
115
115
  pythonはjavascriptよりも辞書の記述に手間がかかる・・・
116
116
 
@@ -120,7 +120,7 @@
120
120
 
121
121
 
122
122
 
123
- 1つは、プログラミングをやっている立場からすれば、引用符で囲まれていないものは、中身が必ずしも文字列とは限らないというのは日常茶飯事です。
123
+ プログラミングをやっている立場からすれば、引用符で囲まれていないものは、中身が必ずしも文字列とは限らないというのは日常茶飯事です。
124
124
 
125
125
  javascriptの例のように 
126
126
 
@@ -134,7 +134,7 @@
134
134
 
135
135
  ```
136
136
 
137
- if 64 < i < 64 + 26:
137
+ if 64 < i < 64 + 26 + 1:
138
138
 
139
139
  a = {chr(i): i}
140
140