【JS】有人能告诉我这个判断为什么是true吗?

【JS】有人能告诉我这个判断为什么是true吗?
有人能告诉我为什么是true吗?两个是一样的,判断不等于的时候结果却是true

回答

你这就是2个对象实例 本来就不相等

via https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality_()

If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

你需要补充的其实是javascript的基本知识,来,看下面:

【JS】有人能告诉我这个判断为什么是true吗?

注意我选中的部分哦!!!

文档地址:comparsion-operators

  1. 对象是引用类型, 两个对象的字段相同并不表示两个对象相同,因为引用地址是不同的。 如果引用的是同一个地址那么结果会为 false

  2. 如果要比较两个对象是否相似(字段值相同),可以利用一些工具函数 lodash 的 isEqual

javascript有五种简单数据类型——UndefinedNullBooleanNumberString,以及一种复杂数据类型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

回到顶部