在 JavaScript 中,我们经常需要比较对象和数组。然而,由于 JavaScript 中的对象和数组是引用类型,所以在比较时需要特别注意。在 ES9 中,引入了一些新的方法来正确比较对象和数组。
对象比较
在 JavaScript 中,对象的比较通常使用 ==
或 ===
运算符。然而,这种比较并不总是正确的。例如:
const obj1 = { a: 1 }; const obj2 = { a: 1 }; console.log(obj1 == obj2); // false console.log(obj1 === obj2); // false
这是因为 obj1
和 obj2
是两个不同的对象,它们的引用地址不同。所以,如果我们要比较两个对象的值是否相等,应该使用 Object.is()
方法。例如:
const obj1 = { a: 1 }; const obj2 = { a: 1 }; console.log(Object.is(obj1, obj2)); // false const obj3 = { a: 1 }; const obj4 = obj3; console.log(Object.is(obj3, obj4)); // true
Object.is()
方法会比较两个值是否相等,包括 NaN 和 +0/-0。如果两个值相等,返回 true,否则返回 false。
数组比较
在 JavaScript 中,数组的比较也通常使用 ==
或 ===
运算符。然而,这种比较同样不总是正确的。例如:
const arr1 = [1, 2, 3]; const arr2 = [1, 2, 3]; console.log(arr1 == arr2); // false console.log(arr1 === arr2); // false
这是因为 arr1
和 arr2
是两个不同的数组,它们的引用地址不同。所以,如果我们要比较两个数组的值是否相等,应该使用 Array.from()
和 Array.prototype.includes()
方法。例如:
const arr1 = [1, 2, 3]; const arr2 = [1, 2, 3]; console.log( Array.from(arr1).every((val, index) => val === arr2[index]) ); // true console.log(arr1.includes(1)); // true
Array.from()
方法会将一个类数组对象或可迭代对象转换成一个数组。然后,我们可以使用 every()
方法来比较两个数组的值是否相等。Array.prototype.includes()
方法则可以判断一个数组是否包含某个值。
结论
在 ES9 中,我们可以使用 Object.is()
方法来正确比较两个对象的值是否相等,使用 Array.from()
和 Array.prototype.includes()
方法来正确比较两个数组的值是否相等。这些方法可以帮助我们避免因为引用地址不同而导致的错误比较。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/673b16ed39d6d08e88b1a22a