JS 运算符及类型转换

typeof 转换类型

typeof 转换类型结果
{}object
[]object
nullobject
undefinedundefined
NaNnumber
0number
trueboolean
‘ ‘string

number 转换类型

Number 转换结果
Number({})NaN
Number([])0
Number(‘’)0
Number(null)0
Number(undefined)NaN
Number(NaN)NaN

一、==

1
2
3
4
5
6
7
8
[] == ![] // true
// Number([].toString())===Number(!Boolean([]))===0
[] == [] // false
null == '' // false
null == undefined // true
1 == 'a' // false
NaN == NaN // false
Infinity + 1 === Infinity // true

image-20220224204513097

二、&&

1
console.log(true||false&&false, true&&false||true) // true true

三、+

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1 + - + + + - + 1 // 2
+"5" // 5 (string to number)
+"" // 0 (string to number)
+"1 + 2" // NaN (doesn't evaluate)
+new Date() // same as (new Date()).getTime()
+"foo" // NaN (string to number)
+{} // NaN
+[] // 0 (toString() returns an empty string list)
+[1] // 1
+[1,2] // NaN
+new Set([1]) // NaN
+BigInt(1) // Uncaught TypeError: Cannot convert a BigInt value to a number
+undefined // NaN
+null // 0
+true // 1
+false // 0
{}+[] // 0 ({}被看作是一个空代码块,因此 + 在这里仅是一元操作符,等同于+[])
({})+1 // '[object Object]1'

四、++

1
2
3
4
5
6
7
8
9
10
11
function funcA(x){
var temp = 4;

function funcB(y){
console.log( ++x + y + (temp--));
}

funcB(5);
}

funcA(6) // 16

五、+=

1
2
var a = '1', b = 2;
console.info(a += b); // 12

六、比较运算符

1
2
4 < [5] // true
4 < [5, 1] // false

七、优先级

1
console.info('value' + 0 ? 'left' : 'right') // 'left'