JS两个空数组为什么不相等

今天看ES6对象的扩展属性,看到Object.is的时候 ,突然发现一个很奇怪的事情,[1]===[1]居然是false, 明明看起来一样啊,怎么会返回false呢? 于是查了一下ES6官方文档之后发现,两个赋值相同的对象居然也不想等,后来搜索之后,以为网友的解释还可以接受,

原文网址 https://www.cnblogs.com/superlizhao/p/8944377.html

var a = [], b = [];
console.log(a==b);

控制台的打印结果是什么?答案是:false。
  接下来看解析:
  原始值的比较是值的比较:
    它们的值相等时它们就相等(
    它们的值和类型都相等时它们就恒等(
=)。
  对象和原始值不同,对象的比较并非值的比较,而是引用的比较:
    即使两个对象包含同样的属性及相同的值,它们也是不相等的
    即使两个数组各个索引元素完全相等,它们也是不相等的
  举个栗子:

var o = {x:1}, p = {x:1};      // 具有相同属性的两个对象
o == p                        // => false: 两个单独的对象永不相等
var a = [], b = [];            // 两个单独的空数组
a == b                        // => false: 两个单独的数组永不相等

我们通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用同一个基对象时,它们才相等。
  举个栗子:

var a = [];  // 定义一个引用空数组的变量a
var b = a;   // 变量b引用同一个数组
b[0] = 1;    // 通过变量b来修改引用的数组
a[0]         // => 1: 变量a也会修改
a === b      // => true:a和b引用同一个数组,因此它们相等
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值