回答編集履歴

7

typo修正

2015/09/28 03:44

投稿

think49
think49

スコア18162

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

表現がくどかったのを修正

2015/09/28 03:44

投稿

think49
think49

スコア18162

test CHANGED
@@ -110,4 +110,4 @@
110
110
 
111
111
  `Date()` の方は上述の通り、単純な String 型なので期待する動作とは異なるように思います。
112
112
 
113
- ユーザ定義関数についても同じように引数をキャストしてやれば、期待通りに動作するようになるはずです。
113
+ ユーザ定義関数についても同じように引数をキャストしてやれば、期待通りに動作するはずです。

5

暗黙の型変換

2015/09/22 01:29

投稿

think49
think49

スコア18162

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

セミコロン追記

2015/09/22 01:26

投稿

think49
think49

スコア18162

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で引用文が機能するように

2015/09/20 23:04

投稿

think49
think49

スコア18162

test CHANGED
@@ -1,10 +1,10 @@
1
- > 0. `trhee`もobjectだと思うのですが、なぜ評価値は`3`と表示されるのでしょうか?
1
+ > 0. trheeもobjectだと思うのですが、なぜ評価値は 3 と表示されるのでしょうか?
2
2
 
3
3
  `three` は Number 型であり、Object 型ではない為です。
4
4
 
5
5
 
6
6
 
7
- > 0. `num`の型がなぜobjectなのに、`three``number`になるのでしょうか?
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. `num`の評価値を`Number {[[PrimitiveValue]]: 3}`ではなく、5など特定の値を返すようにするにはどうすればいいでしょうか?
15
+ > 0. num の評価値を Number {[[PrimitiveValue]]: 3} ではなく、5 など特定の値を返すようにするにはどうすればいいでしょうか?
16
16
 
17
17
  `Number {[[PrimitiveValue]]: 3}` はどこから出てきたのでしょう?
18
18
 

2

プリミティブラッパーオブジェクトについて

2015/09/20 23:00

投稿

think49
think49

スコア18162

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

文体修正

2015/09/20 22:59

投稿

think49
think49

スコア18162

test CHANGED
@@ -16,4 +16,4 @@
16
16
 
17
17
  `Number {[[PrimitiveValue]]: 3}` はどこから出てきたのでしょう?
18
18
 
19
- 評価値を算出する方法が分りません
19
+ 質問者さんの期待する評価値を算出する方法はどのようなものでしょうか。