なぜ 2 だけが出力されるのでしょうか? 1 と 2 の両方を出力すべきではないでしょうか?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
より具体的に言えば、通常、valueOf と toString の 2 つのメソッドのうち 1 つだけを呼び出すことができます。オブジェクトの種類に応じて、異なる判断順序があります。具体的には: 1. オブジェクトを文字列に変換する場合、まずオブジェクトに toString() メソッドがあるかどうかを検出し、これを呼び出して元の値を返し、次に値を文字列に変換します。オブジェクトに toString() メソッドがない場合、またはこのメソッドがプリミティブ値を返さない場合。次に、js はオブジェクトに valueOf() メソッドがあるかどうかを検出し、存在する場合はそれを呼び出し、元の値も呼び出して返し、この値を文字列に変換します。オブジェクトの valueOf メソッドも toString メソッドも存在しない場合、TypeError 例外がスローされます。 2. オブジェクトが数値に変換される場合、toString() メソッドが検出されない場合、そのオブジェクトに valueOf() メソッドがあるかどうかが検出されます。その具体的な原理は上記と同じです。 3. すべての非日付オブジェクトの場合、オブジェクトのプリミティブ値への変換は基本的にオブジェクトの数値への変換であり、日付オブジェクトの場合はすべて最初に valueof() を呼び出します。が使用されます。 あなたの質問に特有ですが、 a は日付オブジェクトではないため、変換が成功した後は、 valueof() メソッドが最初に呼び出されます。当然、 toString() メソッドは再び呼び出されません。
a+'1' を実行すると、a.valueOf メソッドのみが呼び出され、toString メソッドは呼び出されません。まず、toValueOf メソッドと toString メソッドの仕組みを理解することができます。
JS 解析メカニズムの問題
これは js の解析メカニズムであるため、「+」を使用すると、特別な規定がない場合、js は自動的に変換などの toString メソッドを呼び出します。 valueOfと書いた場合は当然toStringの方が優先されます
加算操作を行う場合は、valueOf を呼び出すだけです。出力されないため、文字列に変換する必要はなく、もちろん toString はトリガーされません。 このように出力すると、両方のメソッドが呼び出されることがわかります:
より具体的に言えば、通常、valueOf と toString の 2 つのメソッドのうち 1 つだけを呼び出すことができます。オブジェクトの種類に応じて、異なる判断順序があります。具体的には:
1. オブジェクトを文字列に変換する場合、まずオブジェクトに toString() メソッドがあるかどうかを検出し、これを呼び出して元の値を返し、次に値を文字列に変換します。オブジェクトに toString() メソッドがない場合、またはこのメソッドがプリミティブ値を返さない場合。次に、js はオブジェクトに valueOf() メソッドがあるかどうかを検出し、存在する場合はそれを呼び出し、元の値も呼び出して返し、この値を文字列に変換します。オブジェクトの valueOf メソッドも toString メソッドも存在しない場合、TypeError 例外がスローされます。
2. オブジェクトが数値に変換される場合、toString() メソッドが検出されない場合、そのオブジェクトに valueOf() メソッドがあるかどうかが検出されます。その具体的な原理は上記と同じです。
3. すべての非日付オブジェクトの場合、オブジェクトのプリミティブ値への変換は基本的にオブジェクトの数値への変換であり、日付オブジェクトの場合はすべて最初に valueof() を呼び出します。が使用されます。
あなたの質問に特有ですが、 a は日付オブジェクトではないため、変換が成功した後は、 valueof() メソッドが最初に呼び出されます。当然、 toString() メソッドは再び呼び出されません。
a+'1' を実行すると、a.valueOf メソッドのみが呼び出され、toString メソッドは呼び出されません。まず、toValueOf メソッドと toString メソッドの仕組みを理解することができます。
JS 解析メカニズムの問題
これは js の解析メカニズムであるため、「+」を使用すると、特別な規定がない場合、js は自動的に変換などの toString メソッドを呼び出します。 valueOfと書いた場合は当然toStringの方が優先されます
。加算操作を行う場合は、valueOf を呼び出すだけです。出力されないため、文字列に変換する必要はなく、もちろん toString はトリガーされません。
リーリーこのように出力すると、両方のメソッドが呼び出されることがわかります: