ホームページ > 記事 > ウェブフロントエンド > JavaScriptの型変換(詳しい説明と例)
この記事では、JavaScript の型変換に関する知識を提供します。値をプリミティブ値に変換、数値に変換、文字列に変換することは、エンジン内の 3 つの抽象操作に対応します: ToPrimitive() 、 ToNumber() 、 ToString() , 皆様のお役に立てれば幸いです。
#JavaScript の加算ルール
JavaScript では、加算のルールは実際には非常に単純です。状況は 2 つだけ:型変換
加算演算子は、次の 3 つの型変換をトリガーします。値を、対応するプリミティブ値、数値、文字列に変換します。 JavaScript エンジン内の 3 つの抽象操作: ToPrimitive()、ToNumber()、ToString()ToPrimitive() を通じて値を元の値に変換します。
ToPrimitive(input, PreferredType?)オプションのパラメータ PreferredType は、変換設定を表すだけの Number または String にすることができ、変換結果は必ずしもこのパラメータが指す型である必要はありませんが、変換結果はプリミティブである必要がありますPreferredType が Number としてマークされている場合、入力値を変換するために次の操作が実行されます (§9.1):
入力値が object の場合、ToPrimitive( obj, Number) が最初に呼び出されてオブジェクトをプリミティブ値に変換し、次に ToNumber() が呼び出されてプリミティブ値を数値に変換します。値を文字列に変換します
#入力値がオブジェクトの場合、最初に ToPrimitive(obj, String) が呼び出され、オブジェクトが次のように変換されます。元の値を取得し、ToString() を呼び出して元の値を文字列に変換します。 function (コンストラクターとしてではなく) 呼び出される場合、ToNumber() オペレーションはエンジン内で内部的に呼び出されます。 var obj = {
valueOf: function () {
console.log("valueOf");
return {}; // 没有返回原始值
},
toString: function () {
console.log("toString");
return {}; // 没有返回原始值
}
}
Addition
Number(obj) // output valueOf toString Uncaught TypeError: Cannot convert object to primitive value String(obj) // output toString valueOf Uncaught TypeError: Cannot convert object to primitive value計算中 この式を表現するときの操作手順は次のとおりです。
2 つのオペランドを元の値に変換します (以下は数学的表記法であり、JavaScript コードではありません):
value1 + value2PreferredType は省略されているため、Date 型の値は String を使用し、他の型の値は Number を使用します。
If prim1 またはprim2 が文字列である場合、もう一方を文字列に変換し、2 つの文字列連結演算の結果を返します;
それ以外の場合は、prim1 と prim2 の両方を数値型に変換し、それらの合計を返します。prim1 := ToPrimitive(value1) prim2 := ToPrimitive(value2)このような結果はプリミティブ値ではないため、もう一度 toString() メソッドを呼び出して空の文字列を返します。 (これはプリミティブ値です)。したがって、[] [] の結果は、実際には 2 つの空の文字列を連結したものになります。
> var arr = []; > arr.valueOf() === arr true
出力: NaN
JavaScript エンジンは、最初の {} を空のコード ブロックとして解釈し、無視します。 ここでのプラス記号は、ではありません。加算を表す二項演算子ですが、その後のオペランドを数値に変換する単項演算子であり、Number() 関数とまったく同じです。例えば:###+{} Number({}) Number({}.toString()) // 因为{}.valueOf()不是原始值 Number("[object Object]") NaN
> {} + [] 0
{} 忽略
+[] = Number([]) = Number([].toString()) = Number("") = 0
有趣的是,Node.js的REPL在解析类似的输入时,与Firefox和Chrome(和Node.js一样使用V8引擎)的解析结果不同.下面的输入会被解析成一个表达式,结果更符合我们的预料:
> {} + {} '[object Object][object Object]' > {} + [] '[object Object]'
总结
对象.valueOf() === 对象
数组对象.toString() === 数组对象.join()
对象.toString() === "[object Object]"
Javacript 中 + 号工作:
数字 + 数字
字符串 + 字符串
【相关推荐:javascript学习教程】
以上がJavaScriptの型変換(詳しい説明と例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。