不同数据类型之间的比较

1,229 阅读1分钟

相同类型比较

  • 字符串:比较字符串的 utf-16 编码(通过charCodeAt进行转换)从字符串中索引 1 开始比较,如果相等则继续比较第二位,直到比出大小,如果存在其中一个字符串率先比完,还没比出大小,则长度长的较大
"aa" > "a"; // true
"ab" > "aa"; // true
  • 数字、BigInt:没啥好说的,比大小就完了
  • 布尔值:记住ture > false
  • undefine、null:undefined===undefinednull ===null,直接相等,怎么比都是 false
  • Symbol:没法比大小
  • 对象:先调用对象的valueOf方法进行比较,如果相等,再调用toString方法进行比较
var a = { data: [20, 20], value: 20 };
var b = { data: [10, 30], value: 10 };
a > b; // false
a < b; // false
a.valueOf = function() {
  return this.value; // 20
};
b.valueOf = function() {
  return this.value; // 10
};
a > b; // true
a < b; // false

不同类型进行比较

如果是不同类型进行比较的话,会先将需要比较的值进行Number()转换,然后再进行比较。

如果经过转化以后的值是NaN的话,就比较不出大小了。除了数字字符串,其他类型经过Number()转化后,大部分都是NaN。下面列出一些特殊情况

console.log(Number("")); // 0
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(null)); // 0
console.log(Number([x])); // x

注意Number只能转化长度为 1 的数组

思考

所以看完以上的你能否解释一下为什么![]==[]true

原文链接:shimingw.cn/docs/2020-0…