JavaScript中的object转换成number或string规则介绍


Posted in Javascript onDecember 31, 2014

在JavaScript程序编写过程中,根据不同的上下文,JS会自动将object转换成number或者string后再处理。这种自动转换的规则如下:

object自动转换成string的规则:

1.如果object所属类覆写了toString()方法,则调用该方法。如果toString()调用的返回结果为Primitive(string、number、boolean、undefined、null),则将该Primitive值转换成string后返回。

2.如果object所属类没有覆写toString()方法 ? toString()调用的返回结果为”[object Object]“;或者覆写了toString()方法但该方法返回结果为对象。那么JS将调用object的valueOf()方法,如果valueOf()调用的返回结果为Primitive(string、number、boolean、undefined、null),则将该Primitive值转换成string后返回。

3.如果上述两点均无法满足,无法通过调用object的toString()方法或者valueOf()方法来获取Primitive值,那么JS将抛出TypeError错误。

object自动转换成number的规则:

1.调用object的valueOf()方法,如果得到的是Primitive值,则将该Primitive值转换成number后返回。

2.如果无法从valueOf()方法中获取Primitive值,那么调用object的toString()方法;如果toString()返回的是Primitive值,则将该Primitive值转换成number后返回。

3.如果上述两点均无法满足,那么JS将抛出TypeError错误。

可以看到,object自动转换成string和object自动转换成number的规则其实是一致的,不同之处在于toString()方法和valueOf()方法的调用次序。

根据上述规则,可以很好的理解一些转换结果:

1.对于空数组,当将其转换成number时,得到的结果为0。这是因为首先会调用array的valueOf()方法,由于valueOf()返回的是数组对象本身,因此接下来JS会调用空数组的toString()方法;因为空数组toString()后返回结果为空字符串,因此最终会将空字符串转换成数字0后返回。

2.对于只有一个数字成员的数组来说,应用同样的规则转换成number,最后得到的结果就是该数字。

3.对于有多个数字成员的数组来说,由于无法将字符串转换成number,因此最后得到的结果为NaN。

何时转换成string?何时转换成number?

对object进行自动类型转换时,根据object类型的不同以及操作符的不同,JS会选择将其转换成string还是number。具体规则如下:

1.+操作符两边出现对象的,将对象转换成string。
2.所有对象(Date对象除外),优先转换成number。
3.对于Date对象,优先转换成string。

值得注意的是,对于+操作符,除了操作符两边出现对象或者字符串的情况,其余情况下均执行“转换成number”的操作,同时,这种操作还与值之间的顺序有关。

实验

console.log(3 * []);//0

console.log(3 * [2]);//6

console.log(3 * [1,2]);//NaN
console.log(3 + [2]);//32
var now = new Date();

console.log(now + 1);//Wed Mar 26 2014 10:51:39 GMT+0800 (CST)1

console.log(now - 1);//1395802299223

console.log(now * 2);//2791604598448
console.log(true + true);//2

console.log(2 + null);//2, null is converted to 0

console.log(2 + undefined);//NaN, undefined is converted to NaN

console.log(1 + 2 + " cats");//3 cats

console.log(1 + (2 + " cats"));//12 cats
Javascript 相关文章推荐
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
Sep 10 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
js判断iframe内的网页是否滚动到底部触发事件
Mar 18 Javascript
jQuery简单实现tab选项卡切换效果
Jun 20 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
基于JavaScript实现自动更新倒计时效果
Dec 19 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
javascript 事件处理示例分享
Dec 31 #Javascript
JavaScript中的变量作用域介绍
Dec 31 #Javascript
JavaScript中的变量定义与储存介绍
Dec 31 #Javascript
JavaScript中的操作符==与===介绍
Dec 31 #Javascript
jQuery中[attribute]选择器用法实例
Dec 31 #Javascript
JavaScript中的比较操作符>、=、
Dec 31 #Javascript
javascript 操作符(~、&、|、^、)使用案例
Dec 31 #Javascript
You might like
VFP与其他应用程序的集成
2006/10/09 PHP
无限级别菜单的实现
2006/10/09 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
详解JavaScript的变量
2019/04/04 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
python画一个玫瑰和一个爱心
2020/08/18 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Python通过format函数格式化显示值
2020/10/17 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
施工班组长岗位职责
2014/01/05 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
小升初自荐信范文
2015/03/05 职场文书
庆七一主持词
2015/06/29 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书