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 相关文章推荐
对联广告js flash激活
Oct 19 Javascript
浅析document.createDocumentFragment()与js效率
Jul 08 Javascript
javascript实现日期格式转换
Dec 16 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
基于jquery实现图片放大功能
May 07 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
JavaScript判断微信浏览器实例代码
Jun 13 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
React Native中的RefreshContorl下拉刷新使用
Oct 09 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
Jun 28 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
如何用php获取文件名后缀
2013/06/09 PHP
php之curl设置超时实例
2014/11/03 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
图片完美缩放
2006/09/07 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
python基础教程之类class定义使用方法
2014/02/20 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python使用gensim计算文档相似性
2016/04/10 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
浅析Python中字符串的intern机制
2020/10/03 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
工商企业管理应届生求职信
2013/11/03 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
个人先进材料范文
2014/12/30 职场文书
募捐感谢信
2015/01/22 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
JS数组的常用方法整理
2021/03/31 Javascript