JavaScript 对象转换之toString和valueOf

最先这个话题之前,我们先看一下下面的几个例子:

parseInt(0.0000004)  // 4
![]==[] //true
['x','y'] == 'x,y' //true
alert({name:'mofei'})  //"[object Object]"

关于parseInt()的要领能够检察我之前的文章。本章重要关注中心两个的效果。

一.String范例转换

1.假如toString要领存在而且返回“原始范例”,返回toString的效果。
2.假如toString要领不存在或许返回的不是“原始范例”,挪用valueOf要领,假如valueOf要领存在,而且返回“原始范例”数据,返回valueOf的效果。
3.其他状况,抛出毛病。

二:Number范例

当须要运用Number时,( 如Math.sin() )等,诠释器会尝试将对象转换成Number对象。
一般有以下的状况会触发Number转换:
1.要领参数须要Number的时刻,如Math.sin(obj)等
2.对照的时刻,如 obj == ‘abc’
3.运算的时刻,如 obj + 123
转换划定规矩以下:
1.假如valueOf存在,且返回“原始范例”数据,返回valueOf的效果。
2.假如toString存在,且返回“原始范例”数据,返回toString的效果。
3.其他状况报错。

三:Boolean转换

在举行布尔比较的时刻,比方 if(obj) , while(obj)等等,会举行布尔转换。
布尔转换遵照以下划定规矩:
值 布尔值
true/false true/false
undefined,null false
Number0,NaN 对应 false, 其他的对应 true
String”” 对应false, 其他对应true(’0’对应的是true)
Object true

举个比较典范的例子:

[] == ![]  //true

// 起首第一步右侧的是逻辑推断![],所以先转成boolean
// [] == !true
// [] == false
// 左侧不是原始范例,尝试把左侧转成原始范例,变成
// '' == false
// 转成Number
// 0 == 0

总的来说,运用要领就是为了转换范例:对象范例->基础范例 然后举行基础范例的操纵。

    原文作者:specialCoder
    原文地址: https://segmentfault.com/a/1190000007408202
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞