隐式类型转换

javascript隐式转换

隐式转换为 Boolean

javascript需要一个 boolean 类型的值时(例如 if 语句),会进行隐式转换将非 boolean 类型的值转换为 boolean 类型的值。只有以下值转换为 false ,其他所有值都转换为 true。

	Boolean(undefined) === false
	Boolean(null) === false
	
	Boolean(NaN) === false
	Boolean(0) === false

	Boolean('') === false

数学运算符的隐式转换

  1. 减法、乘法、除法
    在对各种非 Number 类型的值进行减、乘、除法运算时,会先将非 Number 类型转换成 Number 类型,再进行运算。
	成功转换示例
	Number([]) === 0
	Number([3]) === 3
	Number(['3']) === 3
	
	Number(null) === 0

	Number(true) === 1
	Number(false) === 1

	Number('') === 0
	Number('3') === 3

	失败转换示例
	Number({}) ==> NaN
	Number("3q") ==> NaN // 包含非数字的字符串不可转换
	Number(undefined) ==> NaN
  1. 加法
    加法比较特殊可以当作数学运算符,也可以拼接字符串,也就表示使用时需要对 + 使用形式进行区分。

    • 当一侧为 String 类型,进行字符串拼接,并将另一侧转换为字符串类型
    console.log(1 + "test") ==> "1test"
    
    console.log(true + "test") ==> "truetest"
    console.log(false+ "test") ==> "falsetest"
    
    console.log(null+ "test") ==> "nulltest"
    console.log(undefined+ "test") ==> "undefinedtest"
    
    console.log([]+ "test") ==> "test"
    console.log([1,2]+ "test") ==> "1,2test"
    console.log({}+ "test") ==> "[object Object]test"
    
    • 当一侧为 Number 类型,另一侧为引用类型,都将转换成字符串类型并进行字符串拼接
    console.log(1 + {}) ==> "1[object Object]"
    
    • 当一侧为 Number 类型,另一侧为原始类型时,会将原始类型转换为 Number 类型
    console.log(1 + true) ==> 2
    console.log(1 + false) ==> 1
    
    console.log(1 + null) ==> 1
    

==的隐式类型转换

当 == 两侧的数据类型不一致时,会对两侧数据进行隐式转换,将其转换成统一类型的值再进行比较。

  1. NaN 和任何类型的值(包括NaN)比较时永远返回 false。
  2. null 和 undefined 比较时为 true,除此之外 null、undefined 和其他值比较都为 false。
	console.log(null== undefined) ==> true
	
	console.log(null== "") ==> false
	console.log(null== 0) ==> false
	console.log(null== false) ==> false
	
	console.log(undefined== "") ==> false
	console.log(undefined== 0) ==> false
	console.log(undefined== false) ==> false
  1. Boolean 类型和其他任何类型比较时,Boolean 类型转换成 Number 类型。
	console.log(true == 1) ==> true // 因为Number(true) = 1,所以 1 == 1 为true
	console.log(true == 2) ==> false // 因为Number(true) = 1,所以 1 == 2 为false
  1. String 类型和 Number 类型比较时,将 String 类型转换为 Number 类型。
	console.log("1"== 1) ==> true // 因为Number("1") = 1,所以 1 == 1 为true
	console.log(""== 1) ==> false // 因为Number("") = 0,所以 0 == 1 为false
  1. 原始类型和引用类型比较时,引用类型会调用 toPromitive 操作根据规则转换为原始类型。

    • 首先检查是否存在 valueOf 方法返回原始值,如果返回原始值直接使用。
    • valueOf 方法失败,调用 toString 方法返回原始值,如果返回原始值直接使用,否则抛出 TypeError 错误。
	console.log([] == ![])true
	/*
		比较过程:
		1. [] == false
		2. 0 == false
		3. 0 == 0 ==> true
	*/
  1. 引用类型和引用类型比较,始终返回 false。因为两者比较的是对应的地址。

注:

BooleanStringNubmer
truetrue“true”1
falsefalse“false”0
nullfalse“null”0
undefinedfalse“undefined”NaN
NaNfalse“NaN”NaN
0false“0”0
12true“12”12
“”false“”0
“12”true“12”12
function(){}true“function(){}”NaN
{}true“[object Object]”NaN
[]true“”0
[“12”]true“12”12
[“ab”]true“ab”NaN
[12,“ab”]true“12,ab”NaN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值