「11」は数字の 11 に変換できるのに、1 つの「11」の結果が「111」という文字列になるのはなぜですか?
この回答は ES6 より前に存在していたので、この回答は ES5 から取得されたものです。
回答元: ECMAScript5.1 11.4.6
単項 + 演算は、その演算値を数値に変換します。理由は問わないでください。それは仕様で定義されています。
+
回答元: ECMAScript5.1 11.6.1
加算操作の手順:
まず左と右の値をメタタイプ (文字列や数値など) に変換します。たとえば、ブール値は数値に変換され、オブジェクトは通常文字列などに変換されます。
それ以外の場合は、左辺値と右辺値の両方を数値に変換し、その数値に対して加算演算を実行します (たとえば、ブール変換要素の型は文字列ではありませんが、依然としてブール値であるため、ここでこの分岐を判断するときは、ブール値 数値 1 または 0 に変換します)
javascript 是弱类型语言,这是一个原因。再有,如果 + 和数字放在一起,被认为是数字的正数,例如 var a = +11 等同于 var a = 11。这样,而 + 只有在字符串拼接时才会作为拼接的运算符。而 + '11'就不算是拼接字符串,因为根本没有拼接字符串。所以 js 会将 '11' 隐性的转换为 11。
javascript
var a = +11
var a = 11
+ '11'
js
'11'
11
私もjsの初心者です。これが私の理解です。間違っている場合は、修正していただければ幸いです。
+'11' -----> 単項演算子
単項 + 演算子は、オペランドを Number 型に変換します。
1+'11' ----> 加算演算子
オペランドの一方が文字列型の場合、もう一方のオペランドを文字列に変換し、2 つの文字列を連結した結果を返します。
+'11' 的 + 是正负的正,相当于 Number('11')
+'11'
Number('11')
1 + '11' 是加减的加,调用了内部的 toPrimitive 方法比较,其中一方是字符串的时候会尝试调用另一方的 toStringメソッド
1 + '11'
toPrimitive
toString
+'11'
回答元: ECMAScript5.1 11.4.6
単項
+
演算は、その演算値を数値に変換します。理由は問わないでください。それは仕様で定義されています。1 + '11'
回答元: ECMAScript5.1 11.6.1
加算操作の手順:
まず左と右の値をメタタイプ (文字列や数値など) に変換します。たとえば、ブール値は数値に変換され、オブジェクトは通常文字列などに変換されます。
左辺値または右辺値のいずれかの変換値が文字列の場合、両方の値が結合操作のために文字列に変換されます。
-
結果を返します。
それ以外の場合は、左辺値と右辺値の両方を数値に変換し、その数値に対して加算演算を実行します (たとえば、ブール変換要素の型は文字列ではありませんが、依然としてブール値であるため、ここでこの分岐を判断するときは、ブール値 数値 1 または 0 に変換します)
javascript
是弱类型语言,这是一个原因。再有,如果+
和数字放在一起,被认为是数字的正数,例如var a = +11
等同于var a = 11
。这样,而+
只有在字符串拼接时才会作为拼接的运算符。而+ '11'
就不算是拼接字符串,因为根本没有拼接字符串。所以js
会将'11'
隐性的转换为11
。私も
js
の初心者です。これが私の理解です。間違っている場合は、修正していただければ幸いです。+'11' -----> 単項演算子
1+'11' ----> 加算演算子
+'11'
的+
是正负的正,相当于Number('11')
1 + '11'
是加减的加,调用了内部的toPrimitive
方法比较,其中一方是字符串的时候会尝试调用另一方的toString
メソッド