検索

ホームページ  >  に質問  >  本文

javascript - jsの型変換

リーリー

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

伊谢尔伦伊谢尔伦2823日前576

全員に返信(5)返信します

  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:14:39

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

    返事
    0
  • 迷茫

    迷茫2017-05-19 10:14:39

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

    返事
    0
  • 某草草

    某草草2017-05-19 10:14:39

    JS 解析メカニズムの問題

    返事
    0
  • PHPz

    PHPz2017-05-19 10:14:39

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

    返事
    0
  • ringa_lee

    ringa_lee2017-05-19 10:14:39

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

    リーリー

    返事
    0
  • キャンセル返事