js隐式类型转换

 

js隐式类型转换

在js中当程序运行到不是明显类型转换的表达式时,编译器会做隐式的类型转换,而后再运算

隐式类型转换规则

1、转换成string类型:如果 "+" 运算符的一个操作符是字符串,它会将另一个操作符转换成字符串

数值 + (string类型)、布尔型 + (string类型)、undifined + (string类型)、null + (string类型)会直接转换成string类型(String(x))再运算

1 + "1"  //11
//相当于
String(1)+"1"

true + "12"  // true12
//相当于
String(true)+"12"

null+"12" //null12
//相当于
String(null)+"12"

undefined+"12" //undefined12
//相当于
String(undefined)+"12"

引用类型(Object,Array等) + (string类型):如果本身具有toString()方法则调用这个方法将其的原始值转换为字符串,如果没有toString()或者是toString()方法不返回一个原始值则调用valueOf()方法获取原始值并将其转换成字符串,如都没有则抛出类型错误异常

[1,2]+"ab"  // 1,2ab
//相当于
[1,2].toString()+"ab"

{}+"ab"  // [object Object]ab
//相当于
{}.toString()+"ab"

new Date()+"ab" // Thu Aug 01 2019 10:59:16 GMT+0800 (中国标准时间)ab
相当于
new Date().toString()+"ab"

[1,2]+[2,1] // 1,22,1
// [1,2].toString()返回值是字符串,+变成连接字符
相当于
[1,2].toString()+[2,1].toString()

2、转换成number类型:运算符(算术运算符:+ - * / 关系运算符:> >= < <= != ==)将其操作数转成数字

1+undefined // NaN
// 相当于
1+Number(undefined)


1+null // 1
//相当于
1+Number(null)

2*"2" // 4
// 相当于
2*Number("2")

2>'a' // false 
//关系运算符的操作符有string类型时先转为对应字符的 Unicode 编码再转为数字
//相当于
2>'a'.charCodeAt() // 'a'.charCodeAt() => 97

引用类型转数字时:如果具有valueOf()方法则返回其原始值,再转换成数字;否则,如具有toString()方法则返回其原始值再转为数字,再否则抛出类型错误异常

[]+2 // 2
//相当于
Number([].valueOf())+2

[]==0 // true
// 相当于
Number([].valueOf())==0)

3、转为boolean类型:"!"运算符将其操作数转换成布尔值并取反

!'a' // false => !Boolean('a')

!null // true => !Boolean(null)

!undefined // true => !Boolean(undefined)

!0 // true => !Boolean(0)

!"" // true => !Boolean("")

!1 // false => !Boolean(1)

类型转换:

参考:

JavaScript权威指南

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值