java变量名转字符串_JS中将变量转为字符串
译者按: 语言的细枝末节了解一下就可以了,不需要太较真,不过如果一点也不知道的话,那就不太妙了。
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
对于JavaScript,有3种不同方法可以将变量转换为字符串。这篇博客将详细介绍这些方法,并比较他们的优劣。
3种方法
将变量转换为字符串的3种方法如下:
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)的细微差别
""+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)。
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
它们的结果相同
""+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。这就意味着两者的计算过程是这样的:
ToPrimitive(Number):valueOf()返回primitive值,然后使用ToString()转换为字符串。
ToPrimitive(String): toString()通过ToString()函数将primitive值转换为字符串。
可知,虽然计算过程不同,但是它们的结果是一样的。
结论
那么你该选择哪种方法呢?如果你可以确保value值不是null和undefined,那么不妨使用value.toString() 。否则,你只能使用""+value 和String(value),它们基本上是一样的。
参考
java变量名转字符串_JS中将变量转为字符串相关推荐
- python高级函数、将函数作为变量、返回函数_从函数外部返回变量名,作为python函数内部的字符串...
因此,我创建了一个函数,它将一个操作(在本例中,一个数组与一个正弦波进行逐点乘法,但这与我的问题无关).在 现在我已经创建了另一个函数,我想用它创建一个string的python代码,以便以后多次应用 ...
- python合法的变量名有哪些_Python判断变量名是否合法的方法示例
问题: 变量名是否合法: 1.变量名可以由字母,数字或者下划线组成 2.变量名只能以字母或者下划线开头 s = 'hello@' 判断变量名的第一个元素是否为字母或者下划线 s[0] 如果第一个元素符 ...
- python变量名是否合法_Python判断变量名是否合法的方法示例
如何判断一个python表达式是否合法? 换句话说合法的python表达式的通性是什么?活得糊涂的人,容易愉悦:活得清醒的人,容易烦恼. a=input() try:b=eval(a);print(& ...
- python的变量名命名规则_python的变量命名规范
一.python变量名命名规则: 1.变量名通常由字母,数字,下划线组成; 2.数字不能作为变量名开头; 3.不能以python中的关键字命名; 4.变量名要有意义; 5.不要用汉字和拼音去命名; 6 ...
- python判断变量名是否合法_Python判断变量名是否合法的方法示例
问题: 变量名是否合法: 1.变量名可以由字母,数字或者下划线组成 2.变量名只能以字母或者下划线开头 s = 'hello@' 判断变量名的第一个元素是否为字母或者下划线 s[0] 如果第一个元素符 ...
- 处理问题:变量名‘@UserName’已声明。变量名在插叙批次或存储过程内部必须唯一
在做.net版机房收费系统时,遇到这样一个问题:登陆系统时,在B层的登陆函数UserLogin_BLL()中调用了D层的两个函数-判断用户是否存在IsUserExist_DA(),验证密码是否正确Ch ...
- oracle变量名,Oracle中的替换变量,变量名,变量名
替换变量(仅用于SQL *Plus或者用于原理和SQL *Plus相同的开发工具): 临时存储值 利用它可以达到创建通用脚本的目的 利用它可以达到和用户交互,故在SQL *Plus中又称交互式命令 替 ...
- python变量名要求_Python中用中文变量名、函数名,会影响性能吗?
首先,python这样的语言,只能做有限的"词法编址"(lexical address),不可能实现 @王加加 所说的"所有变量名函数名等名称,在转成字节码后,只是一个个 ...
- php动态创建变量名,PHP中动态创建变量名(可变变量)
PHP中,我们可以动态地创建一个变量名.例如,你想要使用与数据库查询得到的字段名称一致的变量名. 使用PHP中"可变变量"的语法,即在一个其值为你想作为变量名称的变量前面加一个$: ...
最新文章
- python 运行部分代码_改改Python代码,运行速度还能提升6万倍
- PL/SQL基础篇4(游标)
- 这 8 篇文章告诉你:未来的软件研发是怎样的?
- 中兴zxr10路由器重启命令_中兴交换机常用命令
- UVA 494(Kindergarten Counting Game)
- step3 . day4 数据结构之线性表 栈和队
- bzoj2761 [JLOI2011]不重复数字
- 以软件开发生命周期来说明各种测试的使用情况
- 我妈给我介绍对象了,我大学还没毕业呢,先在婚介市场也这么卷了的吗?【Python爬虫实战:甜蜜蜜婚介数据采集】
- 计算机知识说明,请说明计算机的工作原理
- win7计算机闪屏,win7电脑闪屏是什么原因
- HTML源码大放送1
- 简洁的微信Markdown编辑器
- Java的小tips(1) ------关于“Java :找不到符号”类问题的解读
- 解决Outlook打不开邮件里的链接的方法
- all boot options are tried的问题解决
- [FreeRTOS系列教程]学习FreeRTOS前的准备工作-----初学者必看
- 海量上传文件服务器端,bat批量上传ftp文件到服务器
- matlab计算wsn覆盖率,WSN覆盖率求解
- 跨域读写Cookie
热门文章
- SAP ABAP实用技巧介绍系列之如何创建Maintenance view
- Spring contextLoaderListener源码学习
- 一个SAP顾问的回忆:我过去很胖!
- 手机app上的consent管理
- 找出SAP OData service出错根源的小技巧
- python最小化打开exe_如何用python使GoAgent窗口打开后自动最小化以及关闭之前的py.exe窗口...
- dataframe 如何选中某列的一行_如何用 Python 在笔记本上分析 100GB 数据?
- 单元测试 代码里面都绝对路径怎么处理_原创 | 编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP...
- java 委托_面试官:java双亲委派机制及作用
- ubuntu下mysql编码格式设置_Ubuntu 16.04.1下修改MySQL默认编码