JavaScript — == и ===


1. ==

Равенство(==) — MDN

Кампари оператора равенства можно кратко описать следующим образом:

  • Если операндами являются оба объекта, возвращает true только в том случае, если оба операнда ссылаются на один и тот же объект.
let a = { food: "pork", fruit: "watermelon" };
let b = a;
console.log(a == b); //true
let c = { ...a }; //or other object-copy operations
console.log(a == c); //false
Вход в полноэкранный режим Выйти из полноэкранного режима
  • Если один из операндов null, а другой undefined, верните true.
console.log(undefined == null); //true
console.log(null == undefined); //true
Вход в полноэкранный режим Выйти из полноэкранного режима
  • Если операнды имеют одинаковый тип, они сравниваются следующим образом:

    • Строка: возвращает true, только если оба операнда содержат одинаковые символы в одинаковом порядке.
    console.log("abcd" == "abcd"); //true
    console.log("abcd" == "abcde"); //false
    
    • Число: возвращает true, только если оба операнда имеют одинаковое значение. +0 и -0 рассматриваются как одно и то же значение. Если один из операндов NaN, возвращается false.
    console.log(1 == 1); //true
    console.log(1 == 2); //false
    console.log(+0 == -0); //true
    console.log(NaN == NaN); //false
    
    • Булево: возвращает true только если оба операнда true или оба false.
  • Если операнды имеют разные типы, перед сравнением попытайтесь привести их к одному типу:

    • При сравнении числа со строкой попытайтесь преобразовать строку в числовое значение.
    console.log(1 == "1"); //true
    
    • Если один из операндов является булевым, преобразуйте булев операнд в 1, если он true и 0, если он false.
    console.log(true == 1); //true
    console.log(false == 0); //true
    console.log(0 == !!null); // true. !null is true, !true is false, false is 0
    console.log(0 == !!undefined); // true. !undefined is true, !true is false, false is 0
    
    • Если одним из операндов является объект, а другим — число или строка, попытайтесь преобразовать объект в примитив, используя методы valueOf() и toString() объекта.
      // objects of type string, number, bigint, boolean, symbol
      let a = 1;
      console.log(a.valueOf()); // 1
      // objects of type object
      let b = { name: "Kitty" };
      console.log(b.valueOf()); // { name: 'Kitty' }
    
      // objects of type string, number, bigint, boolean, symbol
      let a = 1;
      console.log(a.toString()); // "1"
      // objects of type object
      let b = { name: "Kitty" };
      console.log(b.toString()); // [object Object]
    
      let arr = ["kitty"];
      console.log(arr.toString()); // 'kitty'
    
// object == string
let obj = { name: "kitty" };
console.log(obj == "kitty"); //false. obj.valueOf(): { name: "kitty" }, obj.toString(): [object Object]
// array == string
let arr = ["kitty"];
console.log(arr == "kitty"); //true. arr.valueOf(): ['kitty'], arr.toString(): 'kitty'
Вход в полноэкранный режим Выход из полноэкранного режима

2. ===

Строгое равенство(===) — MDN

В отличие от оператора равенства, оператор строгого равенства всегда считает операнды разных типов разными.

  • Если операнды разных типов, возвращается false.
consol.log("3" === 3); //false
console.log(true === 1); //false
console.log(null === undefined); //false
Вход в полноэкранный режим Выйти из полноэкранного режима
  • Если оба операнда являются объектами, верните true, только если они ссылаются на один и тот же объект.
let obj1 = { name: "kitty", age: 1 };
let obj2 = obj1;
console.log(obj1 === obj2);
let obj3 = { name: "kitty", age: 1 };
console.log(obj1 === obj3);
let obj4 = { ...obj1 };
console.log(obj1 === obj4);
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Если оба операнда null или оба операнда undefined, верните true.
console.log(null === null); // true
console.log(undefined === undefined); // true
Вход в полноэкранный режим Выйти из полноэкранного режима
  • Если один из операндов NaN, верните false.
console.log(NaN === NaN); // false
Вход в полноэкранный режим Выйти из полноэкранного режима
  • В противном случае сравните значения двух операндов:

    • Числа должны иметь одинаковые числовые значения. +0 и -0 считаются одинаковыми значениями.
    console.log(+0 === -0); //true
    console.log(1 === 1); //true
    console.log(0 === 1); //false
    
    • Строки должны содержать одинаковые символы в одинаковом порядке.
    console.log("kitty" === "kitty"); //true
    console.log("kitty" === "kity"); //false
    
    • Булевы значения должны быть одновременно true или false.

Наиболее заметное различие между == и === заключается в том, что если операнды имеют разные типы, оператор == пытается преобразовать их к одному типу перед сравнением.

Оцените статью
Procodings.ru
Добавить комментарий