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 相关文章推荐
学习ExtJS table布局
Oct 08 Javascript
jquery的键盘事件修改代码
Feb 24 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
JS文本获得焦点清除文本文字的示例代码
Jan 13 Javascript
jQuery在ul中显示某个li索引号的方法
Mar 17 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
Feb 18 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
js实现课堂随机点名系统
Nov 21 Javascript
JavaScript实现点击切换功能
Jan 27 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
js自带函数备忘 数组
2006/12/29 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
python实现简单的TCP代理服务器
2014/10/08 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
MYSQL基础面试题
2012/05/13 面试题
学雷锋活动总结报告
2014/06/26 职场文书
读群众路线的心得体会
2014/09/03 职场文书
公司授权委托书样本
2014/09/15 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
先进党支部申报材料
2014/12/24 职场文书
上级领导检查欢迎词
2015/09/30 职场文书