2019-02-01
题目
以下代码将输入什么?
const a = [1, 2, 3]
const b = [1, 2, 3]
const c = "1,2,3"
console.log(a == c)
console.log(a == b)
回答
第一个 console.log
输出为 true
,因为 JavaScript 编译器在两个等号时会执行类型转换,a 将进行 a.toString()
转换为 "1,2,3",所以 a 和 c 相等。
第二个 console.log
输出为 false
,因为 a 和 b 是数组对象,对象是通过引用来进行比较的。a 和 b 可以看做 new Array(1, 2, 3)
,都是新开辟出来的地址,所以引用肯定是不同的。如下通过引用的代码片断,将会输出 true
:
let d = [1, 2, 3]
let e = d
e.push(4)
console.log(d === e)
加分回答
- JavaScript 在执行计算时会对类型进行自动转换
- 对象的比较是通过应用,而非
toString
方法 undefined
,null
,boolean
,string
和number
这五类原始类型是通过值进行比较- 等于操作符
==
和===
有什么区别