【发布时间】:2011-04-17 00:45:39
【问题描述】:
我有两个原生 JavaScript 对象:
var foo = { hello: 'world', holy: { shit: 'batman' } };
var bar = { ... };
我想比较两者(foo == bar)。
【问题讨论】:
标签: javascript jquery
我有两个原生 JavaScript 对象:
var foo = { hello: 'world', holy: { shit: 'batman' } };
var bar = { ... };
我想比较两者(foo == bar)。
【问题讨论】:
标签: javascript jquery
jQuery 没有用于比较对象的内置实用程序。从您的帖子中并不清楚您想从两个对象中获得什么信息。您要对它们进行排序吗?
不过,根据您要执行的操作,您可能能够通过使用 jQuery 的一种实用方法来满足您的用例。例如,请参阅:jQuery.extend、jQuery.each、jQuery.map 和 jQuery.merge。 jQuery 主要关注操作 DOM 元素;它没有用于列表排序的内置功能(尽管您可能能够找到插件)。
查看 jQuery 实用程序文档:
http://api.jquery.com/category/utilities/
另外,请查看array.sort(),它显然是内置在 javascript 中的:
【讨论】:
这很好用,但仅在某些情况下:
var obj1 = {n1: "v1", n2: "v2"},
obj2 = {n1: "v1", n2: "v2"},
obj3 = {n2: "v2", n1: "v1"},
obj4 = {n2: "v2", n1: "v1", f: function(){}};
// this will work correctly:
JSON.stringify(obj1) == JSON.stringify(obj2); //true
// but this fails :(
JSON.stringify(obj2) == JSON.stringify(obj3); //false
// and this :(
JSON.stringify(obj3) == JSON.stringify(obj4); //true
【讨论】:
JSON.stringify 比较仅在某些时候起作用,因为键的顺序没有明确定义。在此示例中,属性恰好以相同的顺序迭代 - 并且在测试的特定实现中 - 但 此行为未定义且不应使用。