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

 更新时间:2014年12月31日 09:33:20   投稿:junjie  
这篇文章主要介绍了JavaScript中的object转换成number或string规则介绍,本文讲解了object自动转换成string的规则、object自动转换成number的规则等内容,需要的朋友可以参考下

在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深入理解节流与防抖

    JavaScript深入理解节流与防抖

    防抖和节流严格算起来应该属于性能优化的知识,但实际上遇到的频率相当高,处理不当或者放任不管就容易引起浏览器卡死,下面这篇文章主要给大家介绍了关于JavaScript防抖与节流的实现与注意事项,需要的朋友可以参考下
    2022-04-04
  • ECharts坐标轴刻度数值处理方法例子

    ECharts坐标轴刻度数值处理方法例子

    这篇文章主要给大家介绍了关于ECharts坐标轴刻度数值处理的相关资料,文章介绍了一个用于图表Y轴数值简写的函数,它可以将大数值转换为K、M、B等简写形式,从而使图表更加美观和易读,需要的朋友可以参考下
    2024-11-11
  • JS控件bootstrap datepicker使用方法详解

    JS控件bootstrap datepicker使用方法详解

    这篇文章主要介绍了js控件bootstrap datepicker的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • uniapp时间格式和距离格式的转换

    uniapp时间格式和距离格式的转换

    这篇文章主要介绍了uniapp时间格式和距离格式的转换,第一种是把  YYYY-MM-DD hh:mm:ss 转换成 MM月DD日,第二种是把  hh:mm:ss 转换成 hh:mm,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 为你的微信小程序体积瘦身详解

    为你的微信小程序体积瘦身详解

    这篇文章主要给大家介绍了关于微信小程序瘦身的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 微信小程序分享功能onShareAppMessage(options)用法分析

    微信小程序分享功能onShareAppMessage(options)用法分析

    这篇文章主要介绍了微信小程序分享功能onShareAppMessage(options)用法,结合具体实例形式分析了微信小程序分享功能onShareAppMessage(options)具体使用技巧与相关操作注意事项,需要的朋友可以参考下
    2019-04-04
  • jsonp跨域请求实现示例

    jsonp跨域请求实现示例

    本文主要介绍了jsonp跨域请求实现示例。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • IE图片缓存document.execCommand("BackgroundImageCache",false,true)

    IE图片缓存document.execCommand("BackgroundImageCache",

    IE6下设置背景图片是不会被真正cache住的,就算服务器做了cache,如果想cache住只能
    2011-03-03
  • JS实现搜索关键词的智能提示功能

    JS实现搜索关键词的智能提示功能

    最近在百度搜索的时候,当你输入一个字或者词的时候,他会给你们弹出一个下拉框出来,里面是和你相关的搜索提示,效果非常人性化,基于js怎么实现搜索关键词智能提示功能,下面小编通过实例代码给大家介绍下,需要的的朋友参考下吧
    2017-07-07
  • javascript中eval和with用法实例总结

    javascript中eval和with用法实例总结

    这篇文章主要介绍了javascript中eval和with用法,结合实例形式总结分析了JavaScript中eval和with的功能、用法与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11

最新评论