将value值转换为字符串方法以及原理详解
来源:互联网 发布:2017最新网络神曲 编辑:程序博客网 时间:2024/05/22 05:25
这三种将value转换为字符串的方法是:
1. value.toString()
2. “” + value
3. String(value)
第一种方法不推荐
因为null和undefined去调用toString方法会报错
第二种和第三种方法的效果基本一样
- “” + value这种方法熟悉使用的人很容易理解,而且方便,但是它的可读性是很差的,不利于代码的维护。
- String(value):这种方法可读性更好,唯一的问题是,这种函数调用可能会迷惑人。因为String同时也是一个构造函数,但是它作为普通函数和作为构造函数时的表现完全不同。
String('abc') === new String('abc');> falsetypeof String('abc');> 'string'typeof new String('abc');> 'object'String('abc') instanceof String;> falsenew String('abc') instanceof String;> true
String作为一个普通函数会产生一个字符串(原始值)
String作为一个构造函数时会产生一个String对象的实例
“”+value 和 String(value)的细微差别
这两种方法都是使用引擎内部的ToString()操作将原始值转换为字符串。
“内部操作”的意思是:这个操作函数是在ECMAScript5.1中定义的,但是ES语言本身并不能访问到它,下面的表格解释了ToString()是如何转换原始值的。
将原始值转换为字符串
将对象转换为字符串
这两种方法都将对象值先转化为原始值,然后再将原始值转化为字符串。
但是在这个过程之中
+使用的是内部的ToPrimitive(Number)操作(除非被转化的对象是date对象),
而String()用的是ToPrimitive(String)。
- ToPrimitive(Number):将一个对象转换为原始值,首先调用obj.valueOf()。如果返回值是一个原始值,则返回这个原始值,如果不是,再调用obj.toString()。如果返回的值是原始值,则返回这样原始值,否则,抛出TypeError异常。
- ToPrimitive(String):和上面的方法类似,只是先调用obj.toString()方法。
通过案例查看
var obj = { valueOf:function(){ console.log('valueOf'); return {};//不是原始值,继续执行 }, toString:function(){ console.log('toString'); return {};//不是原始值,继续执行 } }// 运行> "" + objvalueOftoStringTypeError: Cannot convert object to primitive value > String(obj)toStringvalueOfTypeError: Cannot convert object to primitive value
通常结果总相同
上面讲的区别,在实际情况中几乎不太可能遇到,因为:大部分的对象都使用了默认的valueOf()方法,返回的值总是这个对象本身。
> var x = {}> x.valueoOf() === xtrue
因此,ToPrimitive(Number)通常会跳过valueOf方法返回toString()方法的返回值,这就表现的和ToPrimitive(String)完全一样,但是,如果这个对象是Boolean,Number或者String的对象实例,那么它的valueOf()会返回一个原始值(被这个对象包装前的原始值),那么这两种操作就会按照如下步骤执行:
- ToPrimitive(Number)返回了对象的valueOf()方法的返回值(被包装前的原始值)再经过ToString()操作后的结果
- ToPrimitive(String)返回了对象的toString()方法的返回值(在该对象被包装前的原始值上进行ToString()操作的返回值)。
就这样,他们还是返回了相同的结果,只是转换的途径不同。
结论
你应该选择哪种方式来将其他类型的值转换为字符串呢?
如果你能确保这个值永远不会是null或者undefined,则可以用value.toString()来转换,否则,”“+value和String(value)选择哪一个都可以,看个人喜好,个人认为String(value)更明确一点。
- 将value值转换为字符串方法以及原理详解
- 将数字转换为字符串的方法
- 将字符串转换为json对象的方法
- Groovy将字符串类型转换为自定义类型的方法
- js方法将系统当前时间转换为字符串
- 高效的将整型类型转换为字符串的方法
- JSON.stringify()方法将javascript对象转换为字符串
- 将map对象转换为json时,如果key的value值是null,将不会将其加入json字符串
- 将字符串转换为数值
- 将字符串转换为大写
- 将整数转换为字符串
- 将数字转换为字符串
- 将数字转换为字符串
- 将数字转换为字符串
- 将字符串转换为整数
- 将字符串转换为数字
- 将字符串转换为数字
- 将字符串转换为整数
- mongodb和redis 的常用指令和python远程连接
- 正则表达式基础入门
- PHP 导出excel 设置文本格式,数字前不去掉0
- 【C#】50.使用await操作连续的异步任务
- Spring学习01--IOC容器(简介,注入)
- 将value值转换为字符串方法以及原理详解
- 贪吃蛇,游戏,动画,JavaScript
- 编程珠玑-笔记1
- 设备驱动中的platform(kernel-4.7)
- C++ 虚函数表解析
- 聚焦核心竞争力:自建与外购
- 【HIbernate框架学习】:Hibernate对象继承关系映射(一)
- 迷茫中的大二狗,从今天开始认真学习~
- ubuntu12.04 Qt调试器无法正常工作