toString与valueOf区别
Posted 向上人生2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了toString与valueOf区别相关的知识,希望对你有一定的参考价值。
对应视频分享:点击进入
基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null和undefined除外。它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下。
为什么基本数据类型也有方法:
有人说上面这都是基本操作,看这个干嘛,但是想一想,好像有点不对,这几个好像还有别的兄弟姐妹啊,如Undefined, Null,
Boolean, Number和String这几个,有谁去了解过这几个构造函数吗
接下来我们就要用到这个东西了,话说这几位,都是大英雄,这就是在每一个string的背后,都站着一位默默的String,其他也是一样的,实际上,这几位是一些特殊的引用类型,方便我们操作对应的基本类型。
这里涉及到了一个概念’‘基本包装类型’’ 我们来看一段简单的代码
var message = 'helloworld'
var mymessage = message .substring(0,6)
console.log(mymessage) // 'hellow'
在上面这三行代码执行中,发生了很多事。
过程就类似于下面的代码
var _message = new String(‘helloworld’) //通过String去创建一个实例对象
var mymessage = _message.substring(0,6)
//调用这个实例对象的方法,调用完毕之后销毁这个实例对象
console.log(mymessage ) // 'hellow'
在整个过程中,String这个构造函数一直没有出现在我们的视线中,它只是默默地去进行创建,被使用,然后销毁,哇哦,多么沉默的英雄啊。
那现在我们就明白了,基本数据类型调用的并不是它本身的方法,而是在执行这个方法的时候,去为它创建基本包装类型String,然后通过这个基本包装类型的值去创建一个实例对象,再调用这个实例对象的指定方法,最后再将这个实例对象销毁,嗯,基本包装类型也销毁。
toString()与valueOf()
0、object
备注:报错原因
因为实际上浏览器执行的可能是这样:
{}//空语句块
.toString()//另外一条错误的语句
如果要让 js 引擎认为 { 是一个对象字面量表达式的开始,一般就是加 (),这个时候,js 引擎就知道()里的是表达式,所以当做表达式来解析,所以
({}).toString()
就不会报错
1.array。
2.function
3.RegExp
4.Date
valueOf:除了date其他的都是返回数据本身
5.Boolean
6.number返回number字符串
原来 JavaScript采用 IEEE 754 的规范 双精度数字,JavaScript 中只有一种数字类型:基于 IEEE 754
标准的双精度 。它并没有为整数给出一种特定的类型,所以所有的数字都是小数。
123.toString() 等价于 123.0toString(),这样的语句当然行不通。 这也更合理解释了为什么123…toString()、123 .toString()、(123).toString()能够得到正确的返回值。
总结
valueOf偏向于运算,toString偏向于显示。
valueOf:除了date其他的都是返回数据本身
以上是关于toString与valueOf区别的主要内容,如果未能解决你的问题,请参考以下文章
JS中toString()toLocaleString()valueOf()的区别