javascript - 判断数组对象问题
高洛峰
高洛峰 2017-04-11 12:46:51
[JavaScript讨论组]
var a=[1,3];
console.log(a==[1,3]);

为什么打印会false,百度说判断的引用类型,那这种情况:

if(a==[1,3]){//这里怎么写?
    a=[2,5]
}else{
    a=[1,3]
}

我要怎么判断?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(6)
迷茫

引用类型的变量用==或者是===的时候,比较的是它们的引用地址,而非内容。
就你的代码而言,a和后面的[1,3]已经不是同一个对象了,虽然它们内容一样,那也是不相等的。
你要比较数组,那还是自己封装一个函数比较好

Array.prototype.isEqual = function(arr) {
    if(this.length !== arr.length) {
        return(false);
    }
    for(let i = 0; i < this.length; i++) {
        if(this[i] !== arr[i]) {
            return(false);
        }
    }
    return(true);
}

var a = [1,3];
console.log(a.isEqual([1,3]));
PHP中文网

数组是一个对象,两个数组相比较比较的是“地址”,两个不一样的数组的地址自然是不一样的。

对了,这里说的不一样是指不是同一个数组,和数组里的项的值无关。

PHP中文网

告诉你个捷径,走的通的:
var a=[1,3];
console.log(a.toString()==[1,3]);
这样输出为true

黄舟

是要判断包含元素是否全部相同吧

可以循环做判断,顺序不同的话就先排序再循环

记得在哪见过还有一种方法:
[].toString()==[].toString()
顺序不同就先排序

黄舟

判断两个数组是否相同,可以先判断他们的长度是否相等,然后通过for循环依次判断对应位置的元素值是否相等,别无他法。因为数组是特殊的对象,对象如此,数组也是如此。
var a=[],b=[];a==b;//false

阿神

对象(数组也是对象),存在指针指向的内存中地址的问题。
换言之,两个对象虽然看上去长的一样(外在),但是其指针指向的内存中地址不一样(内在),所以它们永远不相等。
只能取判断它们的属性/属性值是否相等,来判断它们外在是否相等。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号