回答編集履歴
7
typo修正
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
> valueOfだと値を取得するときに、Number(13)とオブジェクト化をしないといけないので別変数で扱いたいと思います。
|
82
82
|
|
83
|
-
ECMAScript のネイティブ関数では関数の引数に期待する
|
83
|
+
ECMAScript のネイティブ関数では関数の引数に期待する型がある場合、対象をキャスト(型変換)しています。
|
84
84
|
|
85
85
|
例えば、`String.prototype.replace` の第一引数は対象が正規表現オブジェクトでなければ String 型にキャストする仕様です。
|
86
86
|
|
6
表現がくどかったのを修正
test
CHANGED
@@ -110,4 +110,4 @@
|
|
110
110
|
|
111
111
|
`Date()` の方は上述の通り、単純な String 型なので期待する動作とは異なるように思います。
|
112
112
|
|
113
|
-
ユーザ定義関数についても同じように引数をキャストしてやれば、期待通りに動作する
|
113
|
+
ユーザ定義関数についても同じように引数をキャストしてやれば、期待通りに動作するはずです。
|
5
暗黙の型変換
test
CHANGED
@@ -65,3 +65,49 @@
|
|
65
65
|
Number(hp); // 13
|
66
66
|
|
67
67
|
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
**(2015/09/22 10:26追記)**
|
72
|
+
|
73
|
+
> DateがStringを自動で返すのもまた内部仕様ですね。
|
74
|
+
|
75
|
+
`Date()` が返すのは `new Date().toString()`ですので通常の String 型です。
|
76
|
+
|
77
|
+
つまり、`String.prototype` のメソッドは使えますが、`Date.prototype` のメソッドは使えません。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
> valueOfだと値を取得するときに、Number(13)とオブジェクト化をしないといけないので別変数で扱いたいと思います。
|
82
|
+
|
83
|
+
ECMAScript のネイティブ関数では関数の引数に期待する方がある場合、対象をキャスト(型変換)しています。
|
84
|
+
|
85
|
+
例えば、`String.prototype.replace` の第一引数は対象が正規表現オブジェクトでなければ String 型にキャストする仕様です。
|
86
|
+
|
87
|
+
従って下記コードは期待通りに動作するのです。
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
```JavaScript
|
92
|
+
|
93
|
+
var hp = {start: 10,
|
94
|
+
|
95
|
+
glow: 3,
|
96
|
+
|
97
|
+
valueOf: function () { return this.start + this.glow; },
|
98
|
+
|
99
|
+
toString: function () { return String(this.valueOf()); }};
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
'hoge13'.replace(hp, '14'); // "hoge14"
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
`new Date()` も同様の性質を持つ為、私はこちらの動作を期待しているものだと認識していました。
|
110
|
+
|
111
|
+
`Date()` の方は上述の通り、単純な String 型なので期待する動作とは異なるように思います。
|
112
|
+
|
113
|
+
ユーザ定義関数についても同じように引数をキャストしてやれば、期待通りに動作するようになるはずです。
|
4
セミコロン追記
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
glow: 3,
|
56
56
|
|
57
|
-
valueOf: function () { return this.start + this.glow },
|
57
|
+
valueOf: function () { return this.start + this.glow; },
|
58
58
|
|
59
59
|
toString: function () { return String(this.valueOf()); }};
|
60
60
|
|
3
markdownで引用文が機能するように
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
> 0.
|
1
|
+
> 0. trheeもobjectだと思うのですが、なぜ評価値は 3 と表示されるのでしょうか?
|
2
2
|
|
3
3
|
`three` は Number 型であり、Object 型ではない為です。
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
> 0.
|
7
|
+
> 0. num の型がなぜ object なのに、three は number になるのでしょうか?
|
8
8
|
|
9
9
|
`num` は Object 型ですが、「`three`は`number`になる」の意味が分かりませんでした。
|
10
10
|
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
> 0.
|
15
|
+
> 0. num の評価値を Number {[[PrimitiveValue]]: 3} ではなく、5 など特定の値を返すようにするにはどうすればいいでしょうか?
|
16
16
|
|
17
17
|
`Number {[[PrimitiveValue]]: 3}` はどこから出てきたのでしょう?
|
18
18
|
|
2
プリミティブラッパーオブジェクトについて
test
CHANGED
@@ -17,3 +17,51 @@
|
|
17
17
|
`Number {[[PrimitiveValue]]: 3}` はどこから出てきたのでしょう?
|
18
18
|
|
19
19
|
質問者さんの期待する評価値を算出する方法はどのようなものでしょうか。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
**(2015/09/21 07:59追記)**
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
> "typeof num"を実行した場合は"number"が、"typeof three"の場合は"object"と表示されます。これはNumberがプリミティブ値"Number"のラッパーオブジェクトということでしょうか?
|
32
|
+
|
33
|
+
> しかし、threeがプリミティブなのにNumber型のメソッドが使えるのが不思議です。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
Number 型などのいわゆる Premitive 型はプロパティアクセス演算子を使用する時には内部的にプリミティブラッパーオブジェクトに変換される為、Object 型のような振る舞いが可能です。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
> "num"と打つと、評価値としてNumber {[[PrimitiveValue]]: 3}が返りました。これを別の表示にしたいです。
|
42
|
+
|
43
|
+
> 具体的にはhp={start: 10, glow: 3}というオブジェクトで、ステータスの初期値と成長値をhp.start、hp.glowで取得するようにします。そして、hpとしただけだと、他の変数で管理しているレベルとstartとglowで計算した現在のステータスを表示させるようにしたいです。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
Primitive 型が Object 型のように振舞うのは内部仕様で定められている部分なので Primitive 値をユーザ定義することは不可能ですが、Object 型なら可能です。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
```JavaScript
|
52
|
+
|
53
|
+
var hp = {start: 10,
|
54
|
+
|
55
|
+
glow: 3,
|
56
|
+
|
57
|
+
valueOf: function () { return this.start + this.glow },
|
58
|
+
|
59
|
+
toString: function () { return String(this.valueOf()); }};
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
String(hp); // "13"
|
64
|
+
|
65
|
+
Number(hp); // 13
|
66
|
+
|
67
|
+
```
|
1
文体修正
test
CHANGED
@@ -16,4 +16,4 @@
|
|
16
16
|
|
17
17
|
`Number {[[PrimitiveValue]]: 3}` はどこから出てきたのでしょう?
|
18
18
|
|
19
|
-
評価値を算出する方法
|
19
|
+
質問者さんの期待する評価値を算出する方法はどのようなものでしょうか。
|