前言
大家应该都知道,对于JavaScript,有3种不同方法可以将变量转换为字符串。这篇文章将详细介绍这些方法,并比较他们的优劣。下面话不多说了,来一起看看详细的介绍吧。
3种方法
将变量转换为字符串的3种方法如下:
当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)的细微差别
""+value与String(value)都可以将value转换为字符串,它们是如何做到的呢?事实上,它们虽然结果相同,但是方法稍有区别。
将primitive基本类型转换为字符串
两种方法都使用内部函数ToString()将primitive基本类型转换为字符串。ToString()函数在ECMAScript 5.1 (§9.8)中定义了,但是并不能直接使用,因此称作内部函数。下面的表格显示了ToString()函数如何将primitive基本类型转换为字符串:
参数 | 结果 |
---|---|
undefined | "undefined" |
null | "null" |
Boolean | "true"或者 "false" |
Number | 将数字转换为字符串,例如: "1.765" |
String | 无需转换 |
将Object转换为字符串
转换为字符串之前,两种方法都会先将Object转换为primitive。不同的是,""+value使用内部函数ToPrimitive(Number) (除了date类型),而String(value)使用内部函数ToPrimitive(String) 。
可以通过以下示例了解区别,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
它们的结果相同
""+value与String(value)虽然不同,但是我们很少能感觉到。因为,大多数object使用默认的valueOf() ,它返回对象本身:
> var x = {} > x.valueOf() === x true
由于valueOf()返回值并非primitive,因此ToPrimitive(Number)会跳过valueOf() ,而返回toString()的返回值。这样,与ToPrimitive(String)的返回值就一样了。
当object是Boolean、Number或者String实例时,valueOf()将返回primitive。这就意味着两者的计算过程是这样的:
可知,虽然计算过程不同,但是它们的结果是一样的。
结论
那么你该选择哪种方法呢?如果你可以确保value值不是null和undefined,那么不妨使用value.toString() 。否则,你只能使用""+value 和String(value) ,它们基本上是一样的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
参考
原文: Converting a value to string in JavaScript
译者: Fundebug
问题内容: 我一直在寻找解决方案,但找不到任何可行的方法。 我有一个名为的变量。 字符串被传递给函数。我想将函数内部的变量设置为某种值。我怎样才能做到这一点? (可以在函数中调用许多变量,因此我需要它动态地工作,而不是硬编码的语句。) 编辑:可能有更好的方法来做您要尝试做的事情。 我在JavaScript冒险的早期就曾问过这个问题。查看JavaScript对象的工作方式。 一个简单的介绍: 问题答
问题内容: 我想将python变量名称转换为等效的字符串,如图所示。有什么想法吗? 问题答案: TL; DR:不可能。参见最后的“结论”。 在一个使用场景中,您可能需要此场景。我并不是在暗示没有更好的方法或实现相同的功能。 为了在调试,模式和其他类似情况下出现错误时“转储”任意词典列表,这将很有用。 需要的是该功能的反向功能: 它将以标识符名称(“变量”,“字典”等)作为参数,并返回包含标识符名称
问题内容: 我有任何字符串。像“水牛” 我想将此字符串转换为某些变量名称,例如, 不仅是这个例子,我还想将任何输入字符串转换为某个变量名。我该怎么做(在python中)? 问题答案: 之后,你可以通过以下方式进行检查: 作为输出,你将看到:
问题内容: 我的变量在其中具有递增的数字,例如row0text,row1text,row2text等。 我已经找到了如何动态创建这些变量名的字符串版本的方法,但是一旦有了这些字符串,如何将它们用作实际的变量名而不是代码中的字符串? 例: 一旦知道如何执行此操作,就可以使用for循环遍历这些变量;只是目前我不确定如何在我的代码中将该字符串用作变量名。 谢谢! 问题答案: 简短的回答: 没有 充分的理
我们的测试自动化需要与kafka交互,我们正在研究如何用空手道来实现这一点。 我们有一个java类,它从kafka读取并将记录放入内部列表中。我们然后从空手道中要求这些记录,从后台流量中过滤掉所有消息,并返回与我们的过滤器匹配的第一条消息。 所以我们的消费者看起来是这样的(简化的): 记录可以是json、xml或纯文本,但现在查看的是json案例。在本例中,假设在kafka中有这样的消息:这将作为
问题内容: 我有类似的问题,但是我不知道这个词是什么 它应该打印出来 所以我想知道是否有实际的方法或函数可以用来检索用作字符串的变量名。 问题答案: 您基本上是在问“我的代码如何发现对象的名称?” 一个报价从弗雷德里克Lundh开发(在comp.lang.python)是 特别 适用于本案。 获得在门廊上找到的那只猫的名字的方法相同:猫(对象)本身无法告诉您它的名字,并且它并不在乎–因此,找出猫叫