【问题标题】:comparing objects in javascript比较javascript中的对象
【发布时间】:2014-07-28 02:30:36
【问题描述】:

这是一个关于 javascript 对象本体和 === 运算符工作方式的一般问题。

从一个例子开始:

var z = [1]; 
z === [1] // returns false.

完全让我大吃一惊。为什么??

我猜=== 将数组作为对象进行比较(即通过其对象 id 或其他),而不是通过比较对象的内容——这将返回 true。

那么有什么比较好的方法来比较这样一个对象的内容呢?

您可以通过转换z.toString() 并比较结果来强制解决问题,但这似乎很粗糙。

【问题讨论】:

  • 第一部分实际上是赋值(用'=',不是比较)。你能发布一个实际的工作代码sn-p吗?
  • @MikeCheel 示例有什么问题?他意味着要分配的第一部分,以表明在将[1] 分配给z 之后,当他将其与[1] 进行比较时,它返回false
  • 我只是指出来,因为 MarcB 提到 eh 认为它类似于 == 和 === 之间的区别
  • 是的,我的意思是第一个 = 是一项任务,Tom 明白了。下面的答案一针见血,或者至少证实了我的猜测,尽管我仍然想知道 .toString() 是否是比较两个数组内容的最佳方法,而不是递归迭代并检查每个数组item 以确保它与另一个数组中的相应值相同(并在 item 是数组或对象而不是数组的情况下递归)。

标签: arrays object comparison-operators


【解决方案1】:

您不能用 == 或 === 比较 javascript 中的两个非原始值。结果是假的,即使它们的结构和值相等,因为比较不是在值上,而是在对象的地址上。

Example

z = [5];
a = z;
b = z;
a === b; // true, because a and b linked to z.

为了回答“如何比较”的问题,你可以有效地tostring,或者在两个数组上做一个循环......

【讨论】:

  • 谢谢!我认为转换为字符串可以比较数组的内容,只要数组项是字符串或数字,并且数字是否保留为字符串或数字都没有关系,因为 toString() 会丢失该信息。但是,如果您要比较键值对对象的内容,则 toString 不起作用,因为 toString()-ing 对象返回 [object Object],这不是很有帮助。顺便说一句,这一切都在 Chrome 浏览器控制台中,以防对这个问题很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多