ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript で変数を文字列に変換する 3 つの方法

Javascript で変数を文字列に変換する 3 つの方法

黄舟
黄舟オリジナル
2017-09-22 09:53:492623ブラウズ

この記事では、JavaScript で変数を文字列に変換する 3 つの方法を主に紹介します。これらの 3 つの方法は、サンプル コードを使用しています。必要な人は編集者をフォローして一緒に学ぶことができます。

はじめに

JavaScript では、変数を文字列に変換する 3 つの異なる方法があることを誰もが知っているはずです。この記事では、これらの方法を詳しく紹介し、メリットとデメリットを比較します。以下では多くを語る必要はありません。詳細な紹介を見てみましょう。

3つのメソッド

変数を文字列に変換する3つのメソッドは次のとおりです:

  • value.toString()value.toString()

  • "" + value

  • String(value)

当value为null或者undefined时,第1种方法就不行了。而方法2和方法3基本上是一样的。

""+value: 将value与空字符串相加,即可将其转换为字符串。这种方法其实是一种稍微晦涩的技巧,可能会让别人难于理解开发者的意图。不过,这一点见仁见智,有些人偏爱这种方法。

String(value): 这种方法非常清晰:使用String()函数将value转换为字符串。不过,String()有两种不同用法,容易混淆,尤其对于Java开发者来说。当String()和运算符new一起作为构造函数使用时,它返回一个新创建的String对象;当不用new运算符调用String()时,它只把value转换成原始的字符串。这两者是非常不同的:


> String("Fundebug") === new String("Fundebug")
false
> typeof String("Fundebug")
'string'
> String("Fundebug") instanceof String
false
> typeof new String("Fundebug")
'object'
> new String("Fundebug") instanceof String
true

事实上,将String()作为构造函数使用并不常见,因此仅使用它来转换字符串就好了。

“”+value与String(value)的细微差别

""+valueString(value)都可以将value转换为字符串,它们是如何做到的呢?事实上,它们虽然结果相同,但是方法稍有区别。

将primitive基本类型转换为字符串

两种方法都使用内部函数ToString()将primitive基本类型转换为字符串。ToString()函数在ECMAScript 5.1 (§9.8)中定义了,但是并不能直接使用,因此称作内部函数。下面的表格显示了ToString()

"" + value ""+value: 空の文字列に値を追加して文字列に変換します。この方法は実際には少しわかりにくいテクニックであり、開発者の意図を他の人が理解するのが難しい場合があります。ただし、これは意見の問題であり、この方法を好む人もいます。 String(value): このメソッドは非常に明確です。String() 関数を使用して値を文字列に変換します。ただし、String() には 2 つの異なる用途があり、特に Java 開発者にとっては混乱しやすいです。 String() が演算子 new を使用してコンストラクターとして使用される場合、新しく作成された String オブジェクトが返されます。new 演算子なしで String() が呼び出される場合は、変換値のみが返されます。元の文字列に。この 2 つは大きく異なります:


実際、String() をコンストラクターとして使用することは一般的ではないため、そのまま使用してください。文字列を変換します。 「"+value」と「String(value)」の微妙な違い""+valueString(value) は両方とも値を文字列に変換できます、 どうやってやっているの?実際、結果は同じですが、方法が少し異なります。 プリミティブなプリミティブ型を文字列に変換するどちらのメソッドも内部関数 ToString() を使用して、プリミティブなプリミティブ型を文字列に変換します。 ToString() 関数は ECMAScript 5.1 (§9.8) で定義されていますが、直接使用できないため、内部関数と呼ばれます。以下の表は、ToString() 関数がプリミティブ型を文字列に変換する方法を示しています。 "null"Boolean"true" または "false"Number
String(value) value が null または未定義の場合、最初のメソッドは機能しません。方法 2 と方法 3 は基本的に同じです。
var obj = {
 valueOf: function()
 {
  console.log("valueOf");
  return {};
 },
 toString: function()
 {
  console.log("toString");
  return {};
 }
};
🎜数値を文字列に変換します。例: "1.765"🎜🎜🎜🎜String🎜🎜変換する必要はありません🎜 🎜 🎜🎜

将Object转换为字符串

转换为字符串之前,两种方法都会先将Object转换为primitive。不同的是,""+value使用内部函数ToPrimitive(Number) (除了date类型),而String(value)使用内部函数ToPrimitive(String)

  • ToPrimitive(Number) : 先调用obj.valueOf ,若结果为primitive则返回;否则再调用obj.toString() ,若结果为primitive则返回;否则返回TypeError。

  • ToPrimitive(String) : 与ToPrimitive(Number)类似,只是先调用obj.toString() ,后调用obj.valueOf()

可以通过以下示例了解区别,obj如下:


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

它们的结果相同

""+valueString(value)虽然不同,但是我们很少能感觉到。因为,大多数object使用默认的valueOf() ,它返回对象本身:


> var x = {}
> x.valueOf() === x
true

由于valueOf()返回值并非primitive,因此ToPrimitive(Number)会跳过valueOf() ,而返回toString()的返回值。这样,与ToPrimitive(String)的返回值就一样了。

当object是Boolean、Number或者String实例时,valueOf()将返回primitive。这就意味着两者的计算过程是这样的:

  • ToPrimitive(Number) valueOf()返回primitive值,然后使用ToString()转换为字符串。

  • ToPrimitive(String) : toString()通过ToString()函数将primitive值转换为字符串。

可知,虽然计算过程不同,但是它们的结果是一样的。

结论

那么你该选择哪种方法呢?如果你可以确保value值不是null和undefined,那么不妨使用value.toString() 。否则,你只能使用""+valueString(value) ,它们基本上是一样的。

总结

以上がJavascript で変数を文字列に変換する 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。