ÐеÑÑÑогое ÑавенÑÑво (==)
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
ÐпеÑаÑÐ¾Ñ Ð½ÐµÑÑÑогого ÑавенÑÑва (==) пÑовеÑÑеÑ, ÑвлÑÑÑÑÑ Ð»Ð¸ два его опеÑанда ÑавнÑми, возвÑаÑÐ°Ñ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение.
РоÑлиÑие Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑа ÑÑÑогого ÑавенÑÑва пÑÑаеÑÑÑ Ð¿ÑивеÑÑи и ÑÑавниÑÑ Ð¾Ð¿ÐµÑÐ°Ð½Ð´Ñ ÑазнÑÑ
Ñипов.
ÐнÑеÑакÑивнÑй пÑимеÑ
console.log(1 == 1);
// Expected output: true
console.log("hello" == "hello");
// Expected output: true
console.log("1" == 1);
// Expected output: true
console.log(0 == false);
// Expected output: true
СинÑакÑиÑ
x == y
ÐпиÑание
ÐпеÑаÑоÑÑ Ð½ÐµÑÑÑогого ÑавенÑÑва (== и !=) иÑполÑзÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм IsLooselyEqual. Ðго можно опиÑаÑÑ Ð¿ÑиблизиÑелÑно Ñак:
- ÐÑли опеÑÐ°Ð½Ð´Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй Ñип, они ÑÑавниваÑÑÑÑ ÑледÑÑÑим обÑазом:
- ÐбÑекÑ: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑанда ÑÑÑлаÑÑÑÑ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ обÑекÑ. - СÑÑока: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑанда ÑодеÑÐ¶Ð°Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² одинаковом поÑÑдке и ÑегиÑÑÑе. - ЧиÑло: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑанда имеÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑе знаÑениÑ.+0и-0ÑÑиÑаÑÑÑÑ ÑавнÑми Ð¼ÐµÐ¶Ð´Ñ Ñобой. ÐÑли один из опеÑандов ÑвлÑеÑÑÑNaN, возвÑаÑаеÑÑÑfalse. Таким обÑазом,NaNникогда не ÑавенNaN. - ÐогиÑеÑкое знаÑение: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑандаtrueили обаfalse. - BigInt: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑанда имеÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑе знаÑениÑ. - Символ: возвÑаÑаеÑÑÑ
trueÑолÑко еÑли оба опеÑанда ÑÑÑлаÑÑÑÑ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ Ñимвол.
- ÐбÑекÑ: возвÑаÑаеÑÑÑ
- ÐÑли один из опеÑандов ÑвлÑеÑÑÑ
nullилиundefined, дÑÑгой Ñакже должен бÑÑÑnullилиundefined, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑалоÑÑtrue. ÐнаÑе возвÑаÑаеÑÑÑfalse. - ÐÑли один из опеÑандов ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом, а дÑÑгой пÑимиÑивом, Ñо обÑÐµÐºÑ Ð¿ÑиводиÑÑÑ Ðº пÑимиÑивÑ.
- Ðа ÑÑом Ñаге оба опеÑанда пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ (ÑÑÑока, ÑиÑло, логиÑеÑкое знаÑение, Ñимвол или BigInt). РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
могÑÑ Ð¿ÑоизводиÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе пÑеобÑазованиÑ.
- ÐÑли оба опеÑанда одинакового Ñипа, Ñо они ÑÑавниваÑÑÑÑ, иÑполÑзÑÑ Ñаг 1.
- ÐÑли один из опеÑандов ÑвлÑеÑÑÑ ÑимволÑнÑм знаÑением, а дÑÑгой â неÑ, Ñо возвÑаÑаеÑÑÑ
false. - ÐÑли один из опеÑандов ÑвлÑеÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑким знаÑением, а дÑÑгой â неÑ, Ñо логиÑеÑкое знаÑение пÑиводиÑÑÑ Ðº ÑиÑлÑ:
trueпÑеобÑазÑеÑÑÑ Ð² 1, аfalseв 0. ÐаÑем Ñнова пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑÑавнение. - ЧиÑло и ÑÑÑока: ÑÑÑока пÑиводиÑÑÑ Ðº ÑиÑлÑ. ÐеÑдаÑÐ½Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÑÑаÑÐ¸Ñ Ð¿ÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑезÑлÑÑаÑÑ
NaN, ÑÑо гаÑанÑиÑÑÐµÑ Ð²Ð¾Ð·Ð²ÑаÑениеfalse. - ЧиÑло и BigInt: ÑÑавниваÑÑÑÑ Ð¸Ñ
ÑиÑловÑе знаÑениÑ. ÐÑли ÑиÑлом ÑвлÑеÑÑÑ Â±Infinity или
NaN, возвÑаÑаеÑÑÑfalse. - СÑÑока и BigInt: ÑÑÑока пÑиводиÑÑÑ Ðº BigInt Ñ Ð¸ÑполÑзованием Ñого же Ñамого алгоÑиÑма, ÑÑо и в конÑÑÑÑкÑоÑе
BigInt(). ÐÑи неÑдаÑной конвеÑÑаÑии возвÑаÑаеÑÑÑfalse.
ÐеÑÑÑогое ÑавенÑÑво ÑиммеÑÑиÑно: A == B вÑегда иденÑиÑно B == A Ð´Ð»Ñ Ð»ÑбÑÑ
знаÑений A и B (кÑоме поÑÑдка пÑименÑннÑÑ
пÑеобÑазований).
ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ ÑÑим опеÑаÑоÑом и опеÑаÑоÑом ÑÑÑогого ÑавенÑÑва (===) в Ñом, ÑÑо опеÑаÑÐ¾Ñ ÑÑÑогого ÑавенÑÑва не пÑÑаеÑÑÑ Ð¿ÑивеÑÑи опеÑÐ°Ð½Ð´Ñ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑипÑ. ÐмеÑÑо ÑÑого он вÑегда ÑÑиÑÐ°ÐµÑ Ð¾Ð¿ÐµÑÐ°Ð½Ð´Ñ ÑазнÑÑ
Ñипов не ÑавнÑми. ÐпеÑаÑÐ¾Ñ ÑÑÑогого ÑавенÑÑва, по ÑÑÑи, вÑполнÑÐµÑ ÑолÑко Ñаг 1 и возвÑаÑÐ°ÐµÑ false Ð´Ð»Ñ Ð²ÑеÑ
оÑÑалÑнÑÑ
ÑлÑÑаев.
СÑÑеÑÑвÑÐµÑ Â«ÑмÑÑленное наÑÑÑение» вÑÑепÑиведÑнного алгоÑиÑма: еÑли одним из опеÑандов ÑвлÑеÑÑÑ document.all, он ÑÑиÑаеÑÑÑ ÑавнÑм undefined. ÐÑо ознаÑаеÑ, ÑÑо document.all == null Ñавно true, но document.all === undefined && document.all === null Ñавно false.
ÐÑимеÑÑ
>СÑавнение без пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов
1 == 1; // true
"hello" == "hello"; // true
СÑавнение Ñ Ð¿Ñиведением Ñипов
"1" == 1; // true
1 == "1"; // true
0 == false; // true
0 == null; // false
0 == undefined; // false
0 == !!null; // true, обÑаÑиÑе внимание на двойное логиÑеÑкое оÑÑиÑание
0 == !!undefined; // true, обÑаÑиÑе внимание на двойное логиÑеÑкое оÑÑиÑание
null == undefined; // true
const number1 = new Number(3);
const number2 = new Number(3);
number1 == 3; // true
number1 == number2; // false
СÑавнение обÑекÑов
const object1 = {
key: "value",
};
const object2 = {
key: "value",
};
console.log(object1 == object2); // false
console.log(object1 == object1); // true
СÑавнение ÑÑÑок и ÑÑÑоковÑÑ Ð¾Ð±ÑекÑов
ÐбÑаÑиÑе внимание, ÑÑо ÑÑÑоки, ÑозданнÑе пÑи помоÑи new String() ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами. ÐÑли ÑÑавниваÑÑ Ñакой обÑÐµÐºÑ Ñо ÑÑÑоковÑм лиÑеÑалом, Ñо он бÑÐ´ÐµÑ Ð¿ÑиведÑн к ÑÑÑÐ¾ÐºÐ¾Ð²Ð¾Ð¼Ñ Ð»Ð¸ÑеÑÐ°Ð»Ñ Ð¸ ÑÑавнение бÑÐ´ÐµÑ Ð¿Ñоизведено по ÑодеÑжимомÑ. Ðднако, еÑли оба опеÑанда ÑвлÑÑÑÑÑ Ð¾Ð±ÑекÑами Ñипа String, Ñо они ÑÑавниваÑÑÑÑ ÐºÐ°Ðº обÑекÑÑ Ð¸ ÑÑавнение бÑÐ´ÐµÑ Ð¿Ñоизведено по ÑÑÑлке:
const string1 = "hello";
const string2 = String("hello");
const string3 = new String("hello");
const string4 = new String("hello");
console.log(string1 == string2); // true
console.log(string1 == string3); // true
console.log(string2 == string3); // true
console.log(string3 == string4); // false
console.log(string4 == string4); // true
СÑавнение Ð´Ð°Ñ Ð¸ ÑÑÑок
const d = new Date("1995-12-17T03:24:00");
const s = d.toString(); // напÑимеÑ: "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
console.log(d == s); // true
СÑавнение маÑÑивов и ÑÑÑок
const a = [1, 2, 3];
const b = "1,2,3";
a == b; // true, `a` пÑиводиÑÑÑ Ðº ÑÑÑоке
const c = [true, 0.5, "hey"];
const d = c.toString(); // "true,0.5,hey"
c == d; // true
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-equality-operators > |