function valueOf(obj) { return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj); } function valueEqual(a, b) { // Test for strict equality first. if (a === b) return true; // Otherwise, if either of them == null they are not equal. if (a == null || b == null) return false; if (Array.isArray(a)) { return ( Array.isArray(b) && a.length === b.length && a.every(function(item, index) { return valueEqual(item, b[index]); }) ); } if (typeof a === 'object' || typeof b === 'object') { var aValue = valueOf(a); var bValue = valueOf(b); if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue); return Object.keys(Object.assign({}, a, b)).every(function(key) { return valueEqual(a[key], b[key]); }); } return false; } export default valueEqual;
代码中直接接入上面的代码或者安装包,使用以下命令
npm install --save value-equal
使用
// using ES6 modules import valueEqual from 'value-equal'; // using CommonJS modules var valueEqual = require('value-equal'); valueEqual(1, 1); // true valueEqual('asdf', 'asdf'); // true valueEqual('asdf', new String('asdf')); // true valueEqual(true, true); // true valueEqual(true, false); // false valueEqual({ a: 'a' }, { a: 'a' }); // true valueEqual({ a: 'a' }, { a: 'b' }); // false valueEqual([1, 2, 3], [1, 2, 3]); // true valueEqual([1, 2, 3], [2, 3, 4]); // false