JavaScript 类型转换和运算 及面试题分析

28 阅读1分钟

类型转换规则

类型转换规则.png

运算规则

运算规则.png

面试题分析

腾讯:

0 == '' 
0 == '0' 
2 == true 
2 == false 
false == 'false' 
false == '0' 
false == undefined
false == null
null == undefined
' \t\r\n' == 0

分析:

0 == '' // 都是原始类型,转为数字比较 0 == 0 true
0 == '0' // 都是原始类型,转为数字比较 0 == 0 true
2 == true // 都是原始类型,转为数字比较 2 == 1 false
2 == false // 都是原始类型,转为数字比较 2 == 0 false
false == 'false' // 都是原始类型,转为数字比较 0 == 1 false
false == '0' // 都是原始类型,转为数字比较 0 == 0 true
false == undefined // undefined和null只有与自身比较或互相比较时,才为true false
false == null // undefined和null只有与自身比较或互相比较时,才为true false
null == undefined // undefined和null只有与自身比较或互相比较时,才为true true
' \t\r\n' == 0  // 都是原始类型,转为数字比较 0 == 0 true

网易:

null + '1' == null + 1
null + 1 == 1
null == 0
null == undefined
null + 1 == undefined
null + null == undefined + undefined

分析:

null + '1' == null + 1 // 左边 null + '1' => 0 + '1' = '01' 右边 null + 1 = 0 + 1 = 1,结果false
null + 1 == 1 //  左边 null + 1 = 0 + 1 = 1,结果true
null == 0 // undefined和null只有与自身比较或互相比较时,才为true 结果false
null == undefined // undefined和null只有与自身比较或互相比较时,才为true 结果true
null + 1 == undefined // undefined和null只有与自身比较或互相比较时,才为true 结果true
null + null == undefined + undefined // 左边  0 + 0, 右边 undefined转为数字时为NaN,而比较时只要有一边为NaN结果一定时false,所以结果false

新东方:

var obj1 = {
  a: 1,
  b: 2,
  valueOf: function() {
    return this.a + this.b
  },
  toString: function() {
    return 1
  }
}
var obj2 = {
  toString: function() {
    return 0
  }
}

console.log(obj1 + obj2)

分析,结合第一张图,结果为3