js类型转换总结

参考https://www.jb51.net/article/99702.htm
类型转换在js内部会有一个ToPrimitive操作,其会调用toString()方法和valueOf()方法,将值转换为基本类型值,若没有则报错。
对象转换为字符串时,先调用 toString() ,如果返回不是基础类型值,再调用 valueOf() 方法,如果返回基础类型值primValue,就返回String(primValue)。
对象转换为数字时,先调用valueOf(),再调用 toString() 方法。如果返回基础类型值primValue,就返回Number(primValue)。

valueOf() 返回相应的原始值

每个JavaScript固有对象的 valueOf 方法定义不同。

对象返回值
Array数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。
BooleanBoolean 值。
Date存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function函数本身。
Number数字值。
Object对象本身。这是默认情况。可以改写
String字符串值。
Math 和 Error 对象没有 valueOf 方法。

ECMAScript中的==隐式转换规则:都是先转为数字再进行比较

  • 如果有一个操作数是布尔值,则需要先把其转换为数值----false=0,true=1
  • 如果一个操作数是字符串,另一个是数值,则需要先把字符串转换为数值
  • 如果一个操作数是对象,则先调用valueOf(),若返回值不是基础类型,则调用toString()
一、强制类型转换:

Boolean()
空字符串、数字 0、undefined 或 null,转换为 false

var b1 = Boolean(""); //false - 空字符串
var b2 = Boolean("hello"); //true - 非空字符串
var b1 = Boolean(50); //true - 非零数字
var b1 = Boolean(null); //false - null
var b1 = Boolean(0); //false - 零
var b1 = Boolean(new object()); //true - 对象
var bb = Boolean([]) // true

Number()
Number.MAX_SAFE_INTEGER == Math.pow(2,53)-1
如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。

 Number(false) // 0
 Number(true)  // 1
 Number(undefined) // NaN
 Number(null)  // 0
 Number('1.2')  // 1.2
 Number('1.2.3')  // NaN
 Number(new Object())  //NaN
 Number('50')  // 50

String()
可以将一切值转换为字符串,而toString()方法无法转换null和undefined

 String(null) // 'null'
 String(undefined) // 'undefined'
 String({}) // "[object Object]"
 String({'a':1}) // "[object Object]"
 String([]) // ""
 String([1,2,3]) // "1,2,3"
二、自动类型转换

转换为Boolean的情况:if语句中,除了undefined、null、-0、0、+0、NaN、’‘,其他都自动转为true
转换为String的情况:加法运算中,只要有一个值为字符串则非字符串转换为字符串。
转换为Number的情况:除了加法运算的其他运算符都将转换为数值。

+'abc' // NaN
-'abc' // NaN
+true // 1
-false // 0

常考例子:

[] == ![] // 相当于 [] == false --> [] == 0 --> '' == 0 --> 0==0 --> true
{} == !{} // 相当于 {} == false --> {}调用toString()方法返回 NaN -->NaN == 0 --> false
[] == !{} // --> '' == false --> 0==0 --> true
{} == ![] // NaN == false --> false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值