JavaScriptで一つの値を文字列に変換する方法を分析します.
3484 ワード
この前ES 5を見たついでに、今日はこの文章を見て、説明がよく分かりました.翻訳してみました.JavaScriptでは、主に3つの方法があります.任意の値を文字列に変換することができます.各方法とそれぞれの長所と短所を説明します.1.文字列を変換する3つの方法.この3つの方法は、valueを文字列に変換する方法です.1.value.tostring()2.「」+value 3.String(value)の第1の方法があります.nullとundefinedを文字列に変換できません.第二と第三の方法があります.この二つの方法の効果は基本的に同じです.•「」+value:加算演算子を使って空の文字列を使って任意の値を文字列に変換することができます.この方法のコードの読み取りが悪いと思いますが、String(value)に対しては、このような変換方式が好きな人がいます.String.String.String.String.String.String.String.String.String(value):このような方法の可読性がより良く、唯一の問題は、このような関数の呼び出しは一部の人を惑わすかもしれません.特にJavaに詳しいプログラマは、Stringは同時に構造関数でもあります.普通の関数としての表現と構造関数としての表現は全く違っています.
2.「+」+valueとStringの微妙な違いは今まであなたは知っていました.+とString()はそれらの「パラメータ」を文字列に変換できます.しかし彼らの変換方法はまだ微妙な違いがありますが、ほとんどの場合、変換結果は同じです.
2.1元の値を文字列に変換する
この2つの方法は、エンジン内部のToString()を使って元の値を文字列に変換します.「内部動作」は、ECMAScript 5.1(§9.8)で定義されていますが、ES言語自体はアクセスできません.以下の表はToString()が元の値をどのように変換するかを示しています.
パラメータ
結果
undefined
「undefined」
null
「null」
ブール値
「true」または「false」
数字
数字は文字列として「1.765」などです.
文字列
変換なし
2.2対象値を文字列に変換する
これらの2つの方法は、まず対象値を元の値に変換してから元の値を文字列に変換しますが、この変換では、+は内部のToPrimitive(Number)動作を使用します.
•ToPrimitive(Number):一つのオブジェクト値を元の値に変換し、まずObj.valueOfを呼び出します.戻り値が元の値であれば、この元の値に戻ります.そうでなければ、Obj.toStringを呼び出します.戻り値が元の値であれば、この元の開始値に戻ります.
•ToPrimitive(String):上記と同様に、Obj.toString()を優先的に呼び出すだけの方法で、Obj.valueOf()ではない.
下のこのオブジェクトを変換することによって、それらの違いが見られます.
上で述べた違いは、実際にはほとんどあり得ません.ほとんどの対象はデフォルトの継承を使用してきたvalueOf()メソッドです.戻り値は常にこの対象自体です.
•ToPrimitive(Number)対象に戻ったvalueOf()メソッドの戻り値(ラッピングされる前の元の値)はToStering()の操作後の結果です.
•ToPrimitive(String)は、オブジェクトのtoString()メソッドの戻り値(当該オブジェクトがラッピングされる前の元の値にToString()操作の戻り値)を返します.
このようにして、彼らはやはり同じ結果を返して、ただ転換の道は異なっています.
3.結論
他のタイプの値を文字列に変換するには、どのような方法を選択しますか?この値がnullまたはundefinedではないことを確認できれば、value.toString()で変換できます.さもなければ、「」+valueとString(value)どちらを選んでもいいです.個人の好みを見てください.String(value)の方がより明確だと思います.
4.関連記事 JavaScript values:not everthing is an object[オリジナル値とオブジェクト値の違い] What is{}+{}in JavaScript?〔+演算子の動作原理を説明しました〕 String concation in JavaScript[どのようにすれば複数の文字列をより良く接続できるか]
> String("abc") === new String("abc")
false
> typeof String("abc")
'string'
> String("abc") instanceof String
false
> typeof new String("abc")
'object'
> new String("abc") instanceof String
true
Stringは普通の関数として文字列(元の値)を生成します.構造関数としてStringオブジェクトを生成します.後者はJavaScriptではあまり使われないので、基本的には構造関数としてのStringの使用は無視できますが、変換関数として覚えておいてください.2.「+」+valueとStringの微妙な違いは今まであなたは知っていました.+とString()はそれらの「パラメータ」を文字列に変換できます.しかし彼らの変換方法はまだ微妙な違いがありますが、ほとんどの場合、変換結果は同じです.
2.1元の値を文字列に変換する
この2つの方法は、エンジン内部のToString()を使って元の値を文字列に変換します.「内部動作」は、ECMAScript 5.1(§9.8)で定義されていますが、ES言語自体はアクセスできません.以下の表はToString()が元の値をどのように変換するかを示しています.
パラメータ
結果
undefined
「undefined」
null
「null」
ブール値
「true」または「false」
数字
数字は文字列として「1.765」などです.
文字列
変換なし
2.2対象値を文字列に変換する
これらの2つの方法は、まず対象値を元の値に変換してから元の値を文字列に変換しますが、この変換では、+は内部のToPrimitive(Number)動作を使用します.
•ToPrimitive(Number):一つのオブジェクト値を元の値に変換し、まずObj.valueOfを呼び出します.戻り値が元の値であれば、この元の値に戻ります.そうでなければ、Obj.toStringを呼び出します.戻り値が元の値であれば、この元の開始値に戻ります.
•ToPrimitive(String):上記と同様に、Obj.toString()を優先的に呼び出すだけの方法で、Obj.valueOf()ではない.
下のこのオブジェクトを変換することによって、それらの違いが見られます.
var obj = {
valueOf: function () {
console.log("valueOf");
return {}; // ,
},
toString: function () {
console.log("toString");
return {}; // ,
}
};
// :
> "" + obj
valueOf
toString
TypeError: Cannot convert object to primitive value
> String(obj)
toString
valueOf
TypeError: Cannot convert object to primitive value
2.3結果は通常同じです.上で述べた違いは、実際にはほとんどあり得ません.ほとんどの対象はデフォルトの継承を使用してきたvalueOf()メソッドです.戻り値は常にこの対象自体です.
> var x = {}
> x.valueOf() === x
true
したがって、ToPrimitive(Number)は、通常、valueOfをスキップしてtoStering()方法の戻り値に戻ります.これは、ToPrimitive(String)と全く同じです.しかし、このオブジェクトがBoolean、NumberまたはStringのオブジェクトインスタンスであれば、そのvalueOf()は元の値に戻ります.•ToPrimitive(Number)対象に戻ったvalueOf()メソッドの戻り値(ラッピングされる前の元の値)はToStering()の操作後の結果です.
•ToPrimitive(String)は、オブジェクトのtoString()メソッドの戻り値(当該オブジェクトがラッピングされる前の元の値にToString()操作の戻り値)を返します.
このようにして、彼らはやはり同じ結果を返して、ただ転換の道は異なっています.
3.結論
他のタイプの値を文字列に変換するには、どのような方法を選択しますか?この値がnullまたはundefinedではないことを確認できれば、value.toString()で変換できます.さもなければ、「」+valueとString(value)どちらを選んでもいいです.個人の好みを見てください.String(value)の方がより明確だと思います.
4.関連記事