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

回答編集履歴

3

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

2016/05/17 20:03

投稿

sounisi5011
sounisi5011

スコア697

answer CHANGED
@@ -20,8 +20,8 @@
20
20
  さて、`new String`した場合に返された値ですが、これは`String`オブジェクトです。
21
21
  通常の文字列(`"abc"`など)とほぼ同じものであり、実際、ただの文字列として扱う分には違いはありません。
22
22
 
23
- ただし、前者がプリミティブ型の文字列であるのに対し、後者は`String`オブジェクトです。`typeof`演算子の判定結果は異なりますし、後者はオブジェクトのように、任意のプロパティを追加できます。
23
+ ただし、前者がプリミティブ型の文字列であるのに対し、後者は`String`オブジェクトです。`typeof`演算子の判定結果は異なりますし、後者はオブジェクトのように、任意のプロパティやメソッドを追加できます。
24
- 以下が分かりやすい解説です:
24
+ 以下が分かりやすい解説ページです:
25
25
 
26
26
  * [JavaScriptのオブジェクトとプリミティブ型の違い - Miuran Business Systems](http://www.m-bsys.com/knowledge/javascript-primitive)
27
27
  * [String - JavaScript | MDN #プリミティブ値とオブジェクトの区別](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects)
@@ -43,9 +43,11 @@
43
43
 
44
44
  > Locationオブジェクトのhrefプロパティを分割してオブジェクトへ格納するという決まりがあるのでしょうか?
45
45
 
46
- `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
46
+ * `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
47
- そして、`String`オブジェクトは配列のような操作ため、文字列を分割して格納するようにできています。
47
+ * `String`オブジェクトは配列アクセス演算子(`[0]`ど)による操作を可能にするため、文字列を分割して格納するようにできています。
48
48
 
49
+ それぞれ、別のオブジェクトの「決まり」であり、この2つが組み合わさった時にそのような動作をします。
50
+
49
51
  > Stringオブジェクトの値(?)が"https://teratail.com/"ってこと?
50
52
 
51
53
  と解釈しても問題ありません。
@@ -53,9 +55,9 @@
53
55
  > 今後どうやって使用するのでしょうか?
54
56
 
55
57
  文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
56
- 文字列として利用するなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
58
+ 文字列として利用するだけなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
57
59
 
58
- 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
60
+ 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティやメソッドを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
59
61
  `m.trust`の場合、「`$trusted`というプロパティを加えた`String`オブジェクト」を生成する事で、普通の文字列と区別しています。
60
62
 
61
63
  [mithril.js/mithril.js at next · lhorie/mithril.js](https://github.com/lhorie/mithril.js/blob/next/mithril.js#L1289-L1293)

2

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

2016/05/17 20:03

投稿

sounisi5011
sounisi5011

スコア697

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  > 今後どうやって使用するのでしょうか?
54
54
 
55
55
  文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
56
- 文字列として利用するなら区別する必要は無いので、ややこしくないプリミティブ型の文字列の方が適切です。
56
+ 文字列として利用するなら動作に変わりは無いので、ややこしくないプリミティブ型の文字列の方が適切です。
57
57
 
58
58
  一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
59
59
  `m.trust`の場合、「`$trusted`というプロパティを加えた`String`オブジェクト」を生成する事で、普通の文字列と区別しています。

1

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

2016/05/16 11:08

投稿

sounisi5011
sounisi5011

スコア697

answer CHANGED
@@ -35,4 +35,35 @@
35
35
  ```JavaScript
36
36
  "example"[1] // "x"
37
37
  "hogehoge"[6] // "g"
38
+ ```
39
+
40
+ ---
41
+
42
+ まとめます。
43
+
44
+ > Locationオブジェクトのhrefプロパティを分割してオブジェクトへ格納するという決まりがあるのでしょうか?
45
+
46
+ `Location`オブジェクトは、文字列化したときに`href`プロパティの値になるよう動作します。
47
+ そして、`String`オブジェクトは配列のような操作のため、文字列を分割して格納するようにできています。
48
+
49
+ > Stringオブジェクトの値(?)が"https://teratail.com/"ってこと?
50
+
51
+ と解釈しても問題ありません。
52
+
53
+ > 今後どうやって使用するのでしょうか?
54
+
55
+ 文字列としてしか使用しないなら、`new String`による`String`オブジェクトの取得ではなく、最初に例示したコードのような形でプリミティブ型の文字列を取得したほうが良いと思います。
56
+ 文字列として利用するなら区別する必要は無いので、ややこしくないプリミティブ型の文字列の方が適切です。
57
+
58
+ 一方、[Mithril](http://mithril.js.org/)の[m.trust](http://mithril.js.org/mithril.trust.html)関数のように、文字列に独自のプロパティを加えたいなら、`String`オブジェクトを利用した方が良いでしょう。
59
+ `m.trust`の場合、「`$trusted`というプロパティを加えた`String`オブジェクト」を生成する事で、普通の文字列と区別しています。
60
+
61
+ [mithril.js/mithril.js at next · lhorie/mithril.js](https://github.com/lhorie/mithril.js/blob/next/mithril.js#L1289-L1293)
62
+
63
+ ```JavaScript
64
+ m.trust = function (value) {
65
+ value = new String(value) // eslint-disable-line no-new-wrappers
66
+ value.$trusted = true
67
+ return value
68
+ }
38
69
  ```