javascript - jsの型変換
伊谢尔伦
伊谢尔伦 2017-05-19 10:12:39
0
5
495
リーリー

なぜ 2 だけが出力されるのでしょうか? 1 と 2 の両方を出力すべきではないでしょうか?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(5)
我想大声告诉你

より具体的に言えば、通常、valueOf と toString の 2 つのメソッドのうち 1 つだけを呼び出すことができます。オブジェクトの種類に応じて、異なる判断順序があります。具体的には:
1. オブジェクトを文字列に変換する場合、まずオブジェクトに toString() メソッドがあるかどうかを検出し、これを呼び出して元の値を返し、次に値を文字列に変換します。オブジェクトに toString() メソッドがない場合、またはこのメソッドがプリミティブ値を返さない場合。次に、js はオブジェクトに valueOf() メソッドがあるかどうかを検出し、存在する場合はそれを呼び出し、元の値も呼び出して返し、この値を文字列に変換します。オブジェクトの valueOf メソッドも toString メソッドも存在しない場合、TypeError 例外がスローされます。
2. オブジェクトが数値に変換される場合、toString() メソッドが検出されない場合、そのオブジェクトに valueOf() メソッドがあるかどうかが検出されます。その具体的な原理は上記と同じです。
3. すべての非日付オブジェクトの場合、オブジェクトのプリミティブ値への変換は基本的にオブジェクトの数値への変換であり、日付オブジェクトの場合はすべて最初に valueof() を呼び出します。が使用されます。
あなたの質問に特有ですが、 a は日付オブジェクトではないため、変換が成功した後は、 valueof() メソッドが最初に呼び出されます。当然、 toString() メソッドは再び呼び出されません。

いいねを押す +0
迷茫

a+'1' を実行すると、a.valueOf メソッドのみが呼び出され、toString メソッドは呼び出されません。まず、toValueOf メソッドと toString メソッドの仕組みを理解することができます。

いいねを押す +0
某草草

JS 解析メカニズムの問題

いいねを押す +0
PHPzhong

これは js の解析メカニズムであるため、「+」を使用すると、特別な規定がない場合、js は自動的に変換などの toString メソッドを呼び出します。 valueOfと書いた場合は当然toStringの方が優先されます

いいねを押す +0
左手右手慢动作

加算操作を行う場合は、valueOf を呼び出すだけです。出力されないため、文字列に変換する必要はなく、もちろん toString はトリガーされません。
このように出力すると、両方のメソッドが呼び出されることがわかります:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!