📜  js 比较列表 - Javascript (1)

📅  最后修改于: 2023-12-03 14:43:32.620000             🧑  作者: Mango

JS 比较列表

在JavaScript中,我们经常需要比较各种数据类型。本篇文章将介绍各种常见数据类型的比较方法。

原始类型
数字

数字可以使用常规的比较运算符进行比较:

console.log(1 < 2); // 输出 true
console.log(3 >= 2); // 输出 true
字符串

字符串可以使用常规的比较运算符进行比较,但比较结果会有些许不同:

console.log('a' < 'b'); // 输出 true
console.log('a' > 'B'); // 输出 true

第一个例子输出true,因为'a'的ASCII值小于'b'。第二个例子输出true,因为小写字母的ASCII值比大写字母的ASCII值大。

你也可以使用localeCompare()方法进行字符串比较。该方法返回一个数字,表示两个字符串的相对顺序:

console.log('a'.localeCompare('c')); // 输出 -2
console.log('b'.localeCompare('a')); // 输出  1
布尔值

布尔值只有两个取值:true和false。它们可以使用常规的比较运算符进行比较:

console.log(true == false); // 输出 false
console.log(true != false); // 输出 true
null和undefined

null和undefined都只有一个取值,它们互相等价,但与所有其他值不等价:

console.log(null == undefined); // 输出 true
console.log(null === undefined); // 输出 false
Symbol

Symbol是一种新的原始数据类型,它在ECMAScript 6中引入。每个Symbol都是唯一的,不能与其他任何值相等:

let a = Symbol('a');
let b = Symbol('b');
console.log(a == b); // 输出 false
引用类型
对象

当比较对象时,实际比较的是它们的引用:

let obj1 = {};
let obj2 = {};
console.log(obj1 == obj2); // 输出 false
let obj3 = obj1;
console.log(obj1 == obj3); // 输出 true

如果你想比较两个对象的值是否相等,必须手动比较它们的属性值:

let obj1 = {a: 1, b: 2};
let obj2 = {a: 1, b: 2};
function isEqual(obj1, obj2) {
    let props1 = Object.getOwnPropertyNames(obj1);
    let props2 = Object.getOwnPropertyNames(obj2);
    if (props1.length != props2.length) {
        return false;
    }
    for (let i = 0; i < props1.length; i++) {
        let propName = props1[i];
        if (obj1[propName] !== obj2[propName]) {
            return false;
        }
    }
    return true;
}
console.log(isEqual(obj1, obj2)); // 输出 true
数组

当比较数组时,实际比较的是它们的引用:

let arr1 = [1, 2, 3];
let arr2 = [1, 2, 3];
console.log(arr1 == arr2); // 输出 false
let arr3 = arr1;
console.log(arr1 == arr3); // 输出 true

如果你想比较两个数组的值是否相等,可以使用Array.prototype.every()方法:

let arr1 = [1, 2, 3];
let arr2 = [1, 2, 3];
function isEqualArray(arr1, arr2) {
    if (arr1.length != arr2.length) {
        return false;
    }
    return arr1.every((value, index) => {
        return value === arr2[index];
    });
}
console.log(isEqualArray(arr1, arr2)); // 输出 true
总结

JavaScript中有多种数据类型,它们的比较方法各不相同。在比较对象和数组时,必须注意实际比较的是它们的引用。如果你想比较它们的值是否相等,就必须手动比较它们的属性或元素值。