javascript - 为什么返回结果为假?(在javascript函数中)
问题描述
我有一个简短的问题,为什么我的函数返回 false,而我希望它返回 true。
function isEquivalent(a, b) {
// arrays of property names
var aProps = Object.getOwnPropertyNames(a);
var bProps = Object.getOwnPropertyNames(b);
// If their property lengths are different, they're different objects
if (aProps.length != bProps.length) {
return false;
}
for (var i = 0; i < aProps.length; i++) {
var propName = aProps[i];
// If the values of the property are different, not equal
if (a[propName] !== b[propName]) {
return false;
}
}
// If everything matched, correct
return true;
}
var obj1 = {'prop1': 'test','prop2': function (){} };
var obj2 = {'prop1': 'test','prop2': function (){} };
isEquivalent(obj1,obj2); // returns false
这两个对象(obj1,obj2)完全匹配,但为什么返回值是假的?
有人可以帮我完全理解这个功能吗?
解决方案
这是因为 prop2 的值是两个不同的函数(具有相同的主体)
试试这个,你会发现,如果你使用与它传递的值相同的函数:
var func = function () {};
var obj1 = {'prop1': 'test','prop2': func };
var obj2 = {'prop1': 'test','prop2': func };
isEquivalent(obj1,obj2); // returns false
函数被视为对象并遵循相同的相等规则
推荐阅读
- c++ - 调用带有指针对象错误的指针变量
- python-3.x - 加入列表后从列表中格式化字符串
- mysql - 将 sql 转储恢复到正在运行的 mysql/mariadb docker 容器中
- asp.net-web-api - 无法将 IActionResult 转换为 bool
- jenkins - 如何将 ECS 与 Jenkins 集成
- python - 如何在整个 python 数据帧中寻找相似之处?
- capistrano - Capistrano:如果其中任何主机未通过检查,我如何触发所有主机上的任务?
- apache-spark - Spark 作业状态正在运行,但第一步启动的时间几乎是 20 分钟后
- r - 使用 purrr 重命名 tibbles 列表中的不同列
- sharepoint - 更改 AD 后从用户信息列表中删除用户