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
.
- Числа должны иметь одинаковые числовые значения.
Наиболее заметное различие между ==
и ===
заключается в том, что если операнды имеют разные типы, оператор ==
пытается преобразовать их к одному типу перед сравнением.