扫码关注官方订阅号
var a=[1,3]; console.log(a==[1,3]);
为什么打印会false,百度说判断的引用类型,那这种情况:
if(a==[1,3]){//这里怎么写? a=[2,5] }else{ a=[1,3] }
我要怎么判断?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
引用类型的变量用==或者是===的时候,比较的是它们的引用地址,而非内容。就你的代码而言,a和后面的[1,3]已经不是同一个对象了,虽然它们内容一样,那也是不相等的。你要比较数组,那还是自己封装一个函数比较好
引用类型
==
===
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]));
数组是一个对象,两个数组相比较比较的是“地址”,两个不一样的数组的地址自然是不一样的。
对了,这里说的不一样是指不是同一个数组,和数组里的项的值无关。
告诉你个捷径,走的通的:var a=[1,3];console.log(a.toString()==[1,3]);这样输出为true
是要判断包含元素是否全部相同吧
可以循环做判断,顺序不同的话就先排序再循环
记得在哪见过还有一种方法:[].toString()==[].toString()顺序不同就先排序
判断两个数组是否相同,可以先判断他们的长度是否相等,然后通过for循环依次判断对应位置的元素值是否相等,别无他法。因为数组是特殊的对象,对象如此,数组也是如此。var a=[],b=[];a==b;//false
var a=[],b=[];a==b;//false
对象(数组也是对象),存在指针指向的内存中地址的问题。换言之,两个对象虽然看上去长的一样(外在),但是其指针指向的内存中地址不一样(内在),所以它们永远不相等。只能取判断它们的属性/属性值是否相等,来判断它们外在是否相等。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
引用类型的变量用==或者是===的时候,比较的是它们的引用地址,而非内容。就你的代码而言,
a和后面的[1,3]已经不是同一个对象了,虽然它们内容一样,那也是不相等的。你要比较数组,那还是自己封装一个函数比较好
数组是一个对象,两个数组相比较比较的是“地址”,两个不一样的数组的地址自然是不一样的。
对了,这里说的不一样是指不是同一个数组,和数组里的项的值无关。
告诉你个捷径,走的通的:
var a=[1,3];
console.log(a.toString()==[1,3]);
这样输出为true
是要判断包含元素是否全部相同吧
可以循环做判断,顺序不同的话就先排序再循环
记得在哪见过还有一种方法:[].toString()==[].toString()顺序不同就先排序判断两个数组是否相同,可以先判断他们的长度是否相等,然后通过for循环依次判断对应位置的元素值是否相等,别无他法。因为数组是特殊的对象,对象如此,数组也是如此。
var a=[],b=[];a==b;//false对象(数组也是对象),存在指针指向的内存中地址的问题。
换言之,两个对象虽然看上去长的一样(外在),但是其指针指向的内存中地址不一样(内在),所以它们永远不相等。
只能取判断它们的属性/属性值是否相等,来判断它们外在是否相等。