Javascript ==(抄AI生成的)

6 阅读1分钟

1. 基本规则

  • 如果两个值的类型相同,则直接比较它们的值。

    javascript
    console.log(5 == 5); // true  
    console.log('hello' == 'hello'); // true  
    
  • 如果两个值的类型不同,JavaScript 会尝试进行类型转换,使其类型相同,然后再进行比较。具体的转换规则如下:

2. 具体转换行为

  1. 布尔值与非布尔值

    • 在比较布尔值与其他值时,布尔值会被转换为数字:true 转换为 1false 转换为 0
    javascript
    console.log(true == 1); // true  
    console.log(false == 0); // true  
    console.log(true == 0); // false  
    
  2. 数字与字符串

    • 当比较数字与字符串时,字符串会被转换为数字。
    javascript
    console.log('5' == 5); // true,因为字符串 '5' 被转换为数字 5  
    console.log('10' == 10); // true  
    console.log('5' == '5'); // true,两个字符串相等  
    console.log('abc' == 0); // false'abc' 无法转换为有效数字  
    
  3. 对象与基本类型

    • 当一个对象参与比较时,该对象会被转换为原始值。JavaScript 首先会调用对象的 valueOf() 方法,如果结果不是原始值,它会调用 toString() 方法进行转换。
    javascript
    const obj = {  
        valueOf: () => 42,  
        toString: () => '100'  
    };  
    
    console.log(obj == 42); // true,因为调用了 valueOf()  
    console.log(obj == '100'); // true,因为调用了 toString()  
    console.log(obj == 100); // false  
    
  4. null 和 undefined

    • null 只等于 undefined,而不等于其他任何值。
    javascript
    console.log(null == undefined); // true  
    console.log(null == 0); // false  
    console.log(undefined == 0); // false  
    
  5. NaN(非数字)

    • NaN 与任何值(包括它自己)比较时,是 false
    javascript
    console.log(NaN == NaN); // false  
    console.log(NaN == 5); // false