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不同意.我只是看不出什么是不平等的.还有其他方法可以做比较吗?
该文件angular.equals()说:
如果至少满足下列条件之一,则认为两个对象或值是等效的:
两个对象或值都通过===比较.
通过将它们与angular.equals进行比较,两个对象或值都属于同一类型,并且它们的所有属性都相同.
两个值都是NaN.(在JavaScript中,NaN ==> NaN => false.但我们认为两个NaN相等)
两个值都表示相同的正则表达式(在JavasScript中,/ abc/==/abc/=> false.但我们认为两个正则表达式在它们的文本表示匹配时是相等的).
所以,如果你得到了错误.equals(),那么我们可以得出以下结论:
===因此,只留下文档中的第二项,这意味着对象不是同一类型或它们的某些属性不相同.任何人都可以帮助你进一步了解它们之间究竟有什么不同,我们必须看到实际的对象或创建它们的代码.
如果您在页面中安装了非最小化版本的角度,您也可以直接调用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)
| 归档时间: |
|
| 查看次数: |
5876 次 |
| 最近记录: |