数组和对象与字符串进行比较的问题

今天碰到个这个题目:

var  a=[1,2,3];
var b=[1,2,3];
var  c="1,2,3"
var d={a:1}
var e='{a:1}'
console.log(a==b,a==c,b==c)
console.log(d==e)

结果:false true true false
而结果是a不等于b,a等于c,b也等于c,搞了半天没搞懂,后来才知道,js是弱类型语言,obj与obj之间是比较地址,其他的大部分会转成字符串,而数组可以看作是一个特殊的obj,即键值为固定数值的对象,因此他们比较时候地址不相同,会打印false,而d不等于e是因为需要转格式toString,我进行了下面的测试:

var obj={}
var str='[object Object]'
console.log(obj.toString(),str)
console.log(obj.toString()==str)
结果:[object Object] [object Object]
      true

从这里可以看出obj打印成字符串后会显示[object Object],因此会出错,但是空数组打印出来是空字符串,因此就不会出错