对象的定义及判断是否相等

如何判断两个对象是否相等? 你可能会认为,如果两个对象有相同的属性,以及它们的属性有相同的值,这两个对象就是相等的,但是并不是这样。看如下案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
<script>
    // 对象的定义方法一:对象字面量
    var person = {
        name:'xpf',
        age:23,
        gender:'male'
    }
    // 对象的定义方法二:构造函数
    var animal = new Object();
    animal.name = 'xpf';
    animal.age = 23;
    animal.gender = 'male';

    console.log(typeof(person),person);  //object {name:'xpf',age:23,gander:'male'}
    console.log(typeof(animal),animal);  //object {name:'xpf',age:23,gander:'male'}

    console.log(animal == person);  // false
    console.log(animal === person);  // false
</script>    
</body>
</html>

实际输出结果如下:

通过上面的例子可以看到,无论使用"=="还是"===",都返回false。主要原因是在js中,基本数据类型string,number等是通过来比较,而对象通过指针指向的内存中的地址来做比较。再看下面一个例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
<script>
    // 对象的定义方法一:对象字面量
    var person = {
        name:'xpf',
        age:23,
        gender:'male'
    }
    // 对象的定义方法二:构造函数
    var animal = new Object();
    animal.name = 'xpf';
    animal.age = 23;
    animal.gender = 'male';

    var haha = person;

    console.log(typeof(person),person);  //object {name:'xpf',age:23,gander:'male'}
    console.log(typeof(animal),animal);  //object {name:'xpf',age:23,gander:'male'}
    console.log(typeof(haha),haha);  //object {name:'xpf',age:23,gander:'male'}

    console.log(haha == person);  // true
    console.log(haha === person);  // true
    console.log(animal == haha);  // false
    console.log(animal === haha);  // false
</script>    
</body>
</html>

 

上例返回true的,是因为person和haha的指针指向了内存中的同一个地址。和面向对象的语言(Java/C++)中值传递和引用传递的概念相似。

所以两个对象有相同的属性,以及它们的属性有相同的值,并不一定相等。

对象person和animal在初始化的时候,会在堆内存中开辟两块内存,分别存储各自的值


访问对象的方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
<script>
    var person = {
        name:'xpf',
        age:23,
        gender:'male'
    }
    // 访问对象的第一种方法  .
    console.log(person.name);  // xpf
    
    // 访问对象的第二种方法 []
    console.log(person['name']);  // xpf
</script>    
</body>
</html>

实际输出结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值