我怎样才能找出为什么两个对象与angular.equals不相等?

Ala*_*an2 3 javascript angularjs

我使用以下AngularJS代码:

if (angular.equals(rowData, $scope.grid.backup[i])) {
   console.log('equal')
}
Run Code Online (Sandbox Code Playgroud)

请注意,AngularJS有一个equals函数,用于比较对象内的每个元素.

我调试时两个对象看起来相同,但Angular不同意.我只是看不出什么是不平等的.还有其他方法可以做比较吗?

jfr*_*d00 8

该文件angular.equals()说:

如果至少满足下列条件之一,则认为两个对象或值是等效的:

两个对象或值都通过===比较.

通过将它们与angular.equals进行比较,两个对象或值都属于同一类型,并且它们的所有属性都相同.

两个值都是NaN.(在JavaScript中,NaN ==> NaN => false.但我们认为两个NaN相等)

两个值都表示相同的正则表达式(在JavasScript中,/ abc/==/abc/=> false.但我们认为两个正则表达式在它们的文本表示匹配时是相等的).

所以,如果你得到了错误.equals(),那么我们可以得出以下结论:

  1. 这两个不是同一个对象,所以他们没有通过 ===
  2. 这两个值都不是NaN(无论如何,你可能都在使用对象)
  3. 两个值都不是正则表达式

因此,只留下文档中的第二项,这意味着对象不是同一类型或它们的某些属性不相同.任何人都可以帮助你进一步了解它们之间究竟有什么不同,我们必须看到实际的对象或创建它们的代码.

如果您在页面中安装了非最小化版本的角度,您也可以直接调用angular.equals()并查看代码中的哪一步找到差异.

或者,如果有很多属性或很多对象因此很难进入调试器,那么您可以编写自己的小调试例程来告诉您哪个属性不同.这看起来像这样:

function compareObjects(s, t) {
    if (typeof s !== typeof t) {
        console.log("two objects not the same type");
        return;
    }
    if (typeof s !== "object") {
        console.log('arguments are not typeof === "object"');
        return;
    }
    for (var prop in s) {
        if (s.hasOwnProperty(prop)) {
            if (t.hasOwnProperty(prop)) {
                if (!angular.equals(s[prop], t[prop])) {
                    console.log("property " + prop + " does not match");
                }
            } else {
                console.log("second object does not have property " + prop);
            }
        }
    }
    // now verify that t doesn't have any properties 
    // that are missing from s
    for (prop in t) {
        if (t.hasOwnProperty(prop)) {
            if (!s.hasOwnProperty(prop)) {
                console.log("first object does not have property " + prop);
            }
        }
    }
}


// then call this function on your two objects
// and then look in the debug console to see what it reports
compareObjects(rowData, $scope.grid.backup[i]);
Run Code Online (Sandbox Code Playgroud)