Blog icon indicating copy to clipboard operation
Blog copied to clipboard

变量和类型 - 隐式类型转换

Open logan70 opened this issue 5 years ago • 0 comments

隐式类型转换

    1. 在加法运算时
    • 1-1 若两操作数中有字符串,则优先转字符串;
    • 1-2 若两操作数都不是字符串,则优先转数字,若是引用类型转换得到字符串,则回到1-1。
    1. 其他运算及==,均优先转数字,若是转换得到字符串,再尝试转数字,转成则计算,转不成则NaN
    1. null转数字为0,undefined转数字为NaN
    1. 引用类型转数字valueOf优先级大于toString,转字符串toString优先级大于valueOf,先调用优先级高的,得不到基本类型再调用优先级低的。
    1. +varible强制转数字,失败则为NaN
    1. 多个加号从左到右依次计算。
// 满足1-1,左边的1转字符串'1',相加为'11'
1 + '1' // '11'

// 首先![]优先计算为false,本题实质是 [] == false
// 满足规则1-2,[]尝试转数字,用valueOf,还是[],不行
// 再用toString,得到空字符串,此时为 '' == false
// ''转数字为0,false转数字为0,所以此题为true
[] == ![] // true

// true + true 符合1-2,即1 + 1 = 2
// 2 + false 符合1-2, 即 2 + 0 = 2
// 2 + '100' 符合1-1,即 '2' + '100' = '2100'
true + true + false + '100' // '2100'

// 符合1-2,数组转数字,调用valueOf失败
// 调用toString得到 '1,2,3,4'
// 4 + '1,2,3,4' 符合1-1,最终为 '41,2,3,4' 
4 + [1, 2, 3, 4]

// 符合1-2,对象转数字,调用valueOf失败
// 调用toString得到 '[object Object]'
// 1 + '[object Object]',符合1-1,最终结果为'1[object Object]'
1 + {}

// +'b'视为整体,强制转数字,失败,返回NaN
// 'a' + NaN,符合1-1,返回'aNaN'
'a' + + 'b'

logan70 avatar Nov 17 '19 10:11 logan70