【JS】有人能告诉我这个判断为什么是true吗?
有人能告诉我为什么是true吗?两个是一样的,判断不等于的时候结果却是true
回答
你这就是2个对象实例 本来就不相等
If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.
你需要补充的其实是javascript
的基本知识,来,看下面:
注意我选中的部分哦!!!
文档地址:comparsion-operators
对象是引用类型, 两个对象的字段相同并不表示两个对象相同,因为引用地址是不同的。 如果引用的是同一个地址那么结果会为 false
如果要比较两个对象是否相似(字段值相同),可以利用一些工具函数 lodash 的 isEqual
javascript有五种简单数据类型——Undefined
、Null
、Boolean
、Number
、String
,以及一种复杂数据类型Object
。
简单数据类型中Null
表示一个空的指针,其余四种均表示一个具体的值。
而对于Object
类型,它又被称为引用类型,Js中所有的对象均是某个特定引用类型的实例。
Js当初可能是有效率方面的考虑吧,所有的对象其实都是指针(引用)。纵然对象内部解构一模一样,但是只要实例不同,指针指向的内存地址当然是不一样的。
==
符号的运算法则对于对象而言,它是不会去检查对象内部的,只会检查引用的内存地址是不是同一个,到你这里,你这两个数组明显不是同一个实例,用!=
判断当然会得到true
。
你这个问题其实是可以简化为如下代码;
var a=[1];var b=[1];
a==b //false
数组之间是不能直接做比较的;当然如果想比较;也是有办法的;
var a=[1];var b=[1];
a.sort().toString()==b.sort().toString(); // true
另外;小伙子;我看你骨骼惊奇;必是coding奇才;将来维护程序猿界的正义与和平的重任就交给你了;我这有篇《javascript中的那些让人摸不着头脑的不=》;原价13块8;现在免费送给你了;传送门:http://baijunyao.com/article/58
以上是 【JS】有人能告诉我这个判断为什么是true吗? 的全部内容, 来源链接: utcz.com/a/86678.html