首页 > 解决方案 > 为什么返回结果为假?(在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)完全匹配,但为什么返回值是假的?

有人可以帮我完全理解这个功能吗?

标签: javascript

解决方案


这是因为 prop2 的值是两个不同的函数(具有相同的主体)

试试这个,你会发现,如果你使用与它传递的值相同的函数:

var func = function () {};
var obj1 = {'prop1': 'test','prop2': func };
var obj2 = {'prop1': 'test','prop2': func };

isEquivalent(obj1,obj2); // returns false

函数被视为对象并遵循相同的相等规则


推荐阅读