<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
let a = [],
b = [],
c = [''],
d = [' '];
console.log(a == b);
console.log(Boolean(a));
console.log(a == []);
console.log(c == ['']);
console.log(d == [' ']);
// alert(a.toString() == b.toString())
</script>
</html>
控制台打印结果:
分析
原始值的比较是值的比较:
它们的值相等时它们就相等(==)
它们的值和类型都相等时它们就恒等(===)。
对象和原始值不同,对象的比较并非值的比较,而是引用的比较:
即使两个对象包含同样的属性及相同的值,它们也是不相等的
即使两个数组各个索引元素完全相等,它们也是不相等的
在JS中,数组为引用类型,通过==或者===来比较两个数组是否相同,其实是比较两个数组的内存地址是否相同。
[] == []
为false,是因为左、右两边的'[]'都不是同一个数组对象,其内存地址不一样。
如果要判断两个数组中的元素内容是否相同,可以通过将数组转换成字符串再做比较
var a = [], b = [];
alert(a.toString() == b.toString())
显示结果: