回答編集履歴

3

いくつかの箇所の説明文が分かりにくかったため、修正

2016/05/17 20:03

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
@@ -42,9 +42,9 @@
42
42
 
43
43
 
44
44
 
45
- ただし、前者がプリミティブ型の文字列であるのに対し、後者は`String`オブジェクトです。`typeof`演算子の判定結果は異なりますし、後者はオブジェクトのように、任意のプロパティを追加できます。
45
+ ただし、前者がプリミティブ型の文字列であるのに対し、後者は`String`オブジェクトです。`typeof`演算子の判定結果は異なりますし、後者はオブジェクトのように、任意のプロパティやメソッドを追加できます。
46
46
 
47
- 以下が分かりやすい解説です:
47
+ 以下が分かりやすい解説ページです:
48
48
 
49
49
 
50
50
 
@@ -88,9 +88,13 @@
88
88
 
89
89
 
90
90
 
91
- `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
91
+ * `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
92
92
 
93
- そして、`String`オブジェクトは配列うな操作ため、文字列を分割して格納するようにできています。
93
+ * `String`オブジェクトは配列アクセス演算子(`[0]`など)に操作を可能にするため、文字列を分割して格納するようにできています。
94
+
95
+
96
+
97
+ それぞれ、別のオブジェクトの「決まり」であり、この2つが組み合わさった時にそのような動作をします。
94
98
 
95
99
 
96
100
 
@@ -108,11 +112,11 @@
108
112
 
109
113
  文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
110
114
 
111
- 文字列として利用するなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
115
+ 文字列として利用するだけなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
112
116
 
113
117
 
114
118
 
115
- 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
119
+ 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティやメソッドを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
116
120
 
117
121
  `m.trust`の場合、「`$trusted`というプロパティを加えた`String`オブジェクト」を生成する事で、普通の文字列と区別しています。
118
122
 

2

Stringオブジェクトとプリミティブ型の文字列とを使い分ける事の説明文が分かりにくかったため、修正

2016/05/17 20:03

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
@@ -108,7 +108,7 @@
108
108
 
109
109
  文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
110
110
 
111
- 文字列として利用するなら区別する必要は無いので、ややこしくないプリミティブ型の文字列の方が適切です。
111
+ 文字列として利用するなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
112
112
 
113
113
 
114
114
 

1

質問に対する具体的な返答を追記

2016/05/16 11:08

投稿

sounisi5011
sounisi5011

スコア697

test CHANGED
@@ -73,3 +73,65 @@
73
73
  "hogehoge"[6] // "g"
74
74
 
75
75
  ```
76
+
77
+
78
+
79
+ ---
80
+
81
+
82
+
83
+ まとめます。
84
+
85
+
86
+
87
+ > Locationオブジェクトのhrefプロパティを分割してオブジェクトへ格納するという決まりがあるのでしょうか?
88
+
89
+
90
+
91
+ `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
92
+
93
+ そして、`String`オブジェクトは配列のような操作のため、文字列を分割して格納するようにできています。
94
+
95
+
96
+
97
+ > Stringオブジェクトの値(?)が"https://teratail.com/"ってこと?
98
+
99
+
100
+
101
+ と解釈しても問題ありません。
102
+
103
+
104
+
105
+ > 今後どうやって使用するのでしょうか?
106
+
107
+
108
+
109
+ 文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
110
+
111
+ 文字列として利用するなら区別する必要は無いので、ややこしくないプリミティブ型の文字列の方が適切です。
112
+
113
+
114
+
115
+ 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
116
+
117
+ `m.trust`の場合、「`$trusted`というプロパティを加えた`String`オブジェクト」を生成する事で、普通の文字列と区別しています。
118
+
119
+
120
+
121
+ [mithril.js/mithril.js at next · lhorie/mithril.js](https://github.com/lhorie/mithril.js/blob/next/mithril.js#L1289-L1293)
122
+
123
+
124
+
125
+ ```JavaScript
126
+
127
+ m.trust = function (value) {
128
+
129
+ value = new String(value) // eslint-disable-line no-new-wrappers
130
+
131
+ value.$trusted = true
132
+
133
+ return value
134
+
135
+ }
136
+
137
+ ```