Які аператар роўны (== vs ===) павінен выкарыстоўвацца ў параўнанні JavaScript?

Я выкарыстоўваю JSLint для праходжання праз JavaScript, і ён вяртае шмат прапаноў, каб замяніць == (два знака роўнасці) на === (тры знака роўнасці), калі вы робіце нешта накшталт параўнання idSele_UNVEHtype.value.length == 0 ўнутры аператара if .

Ці ёсць перавага ў прадукцыйнасці для замены == на === ?

Любыя паляпшэння прадукцыйнасці будуць вітацца, паколькі існуе мноства аператараў параўнання.

Калі пераўтварэнне тыпу не адбываецца, ці будзе каэфіцыент узмацнення па параўнанні з == ?

5673
11 дек. зададзены bcasp 11 снеж. 2008-12-11 17:19 '08 у 17:19 2008-12-11 17:19
ответ 51 адказ
  • 1
  • 2

Аператар ідэнтычнасці ( === ) паводзіць сябе ідэнтычна аператару роўнасці ( == ), за выключэннем таго, што пераўтварэнне тыпу не выконваецца, і тыпы павінны быць аднолькавымі, каб лічыцца роўнымі.

Даведка: Javascript Tutorial: Аператары параўнання

Аператар == будзе параўноўваць для роўнасці пасля выканання любых неабходных пераўтварэнняў тыпаў. Аператар === будзе не выконваць пераўтварэнне, таму, калі два значэння не супадаюць, то === проста верне false . Абодва яны аднолькава хуткія.

Працытаваць Douglas Crockford выдатна JavaScript: добрыя часткі ,

У JavaScript ёсць два набору аператараў роўнасці: === і !== , а іх злыя двайняты == і != . Добрыя працуюць так, як вы чакалі. Калі два аперанда аднаго тыпу і маюць аднолькавае значэнне, то === стварае true і !== вырабляе false . Злыя двайняты паступаюць правільна, калі аперанды аднаго тыпу, але калі яны маюць розныя тыпы, яны спрабуюць прымусіць каштоўнасці. правілы, з дапамогай якіх яны робяць, якія з'яўляюцца складанымі і непераадольнымі. Вось некаторыя з цікавых выпадкаў:

 '' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true 

Адсутнасць транзітыўнасць выклікае трывогу. Мая парада - ніколі не выкарыстоўваць злых блізнят. Замест гэтага заўсёды выкарыстоўвайце === і !== . Усе прыведзеныя параўнання паказваюць false з дапамогай аператара === .


абнаўленне:

Добры момант быў узняты @Casebash у каментарах і ў @Phillipe Laybaert адносна спасылкавых тыпаў. Для спасылкавых тыпаў == і === дзейнічаюць паслядоўна адзін з адным (за выключэннем спецыяльнага выпадкі).

 var a = [1,2,3]; var b = [1,2,3]; var c = { x: 1, y: 2 }; var d = { x: 1, y: 2 }; var e = "text"; var f = "te" + "xt"; a == b // false a === b // false c == d // false c === d // false e == f // true e === f // true 

Прыватным выпадкам з'яўляецца параўнанне литерала з аб'ектам, які ацэньвае адзін і той жа литерал з-за яго метаду toString або valueOf . Напрыклад, разгледзім параўнанне радковага литерала са радковыя аб'ектам, створаным канструктарам String .

 "abc" == new String("abc") // true "abc" === new String("abc") // false 

Тут аператар == правярае значэння двух аб'ектаў і вяртае true , але === бачыць, што яны не з'яўляюцца адным і тым жа тыпам і вяртаюць false . Які з іх правільны? Гэта сапраўды залежыць ад таго, што вы спрабуеце параўнаць. Мая парада заключаецца ў тым, каб цалкам абыходзіць пытанне і проста не выкарыстоўваць канструктар String для стварэння радковых аб'ектаў.

спасылка
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

5840
11 дек. адказ дадзены Bill the Lizard 11 снеж. 2008-12-11 17:25 '08 у 17:25 2008-12-11 17:25

Выкарыстоўваючы аператар == (Роўнасць)

 true == 1; //true, because 'true' is converted to 1 and then compared "2" == 2; //true, because "2" is converted to 2 and then compared 

Выкарыстоўваючы аператар === (Identity)

border=0
 true === 1; //false "2" === 2; //false 

Гэта звязана з тым, што аператар роўнасці == мае тып прымусу, што азначае, што інтэрпрэтатар няяўна спрабуе пераўтварыць значэння перад параўнаннем.

З іншага боку, аператар Identity === не выконвае тып прымусу і, такім чынам, не пераўтворыць значэння пры параўнанні.

1016
11 дек. адказ дадзены Andreas Grech 11 снеж. 2008-12-11 17:33 '08 у 17:33 2008-12-11 17:33

У адказах тут я нічога не чытаў пра тое, што азначае equal. Некаторыя скажуць, што === азначае роўны і аднаго і таго ж тыпу, але гэта не так. Фактычна гэта азначае, што абодва аперанда спасылаюцца на адзін і той жа аб'ект або ў выпадку тыпаў значэнняў маюць тое ж значэнне.

Такім чынам, давайце возьмем наступны код:

 var a = [1,2,3]; var b = [1,2,3]; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true type var a = [1,2,3]; var b = [1,2,3]; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true 

Тое ж самае і тут:

 var a = { x: 1, y: 2 }; var b = { x: 1, y: 2 }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true type var a = { x: 1, y: 2 }; var b = { x: 1, y: 2 }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true 

Ці нават:

 var a = { }; var b = { }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true type var a = { }; var b = { }; var c = a; var ab_eq = (a === b); // false (even though a and b are the same type) var ac_eq = (a === c); // true 

Такія паводзіны не заўсёды відавочна. Там больш да гісторыі, чым да таго, каб быць роўным і быць таго ж тыпу.

правіла:

Для тыпаў значэнняў (лікі):
a === b вяртае true, калі a і b маюць аднолькавае значэнне і маюць адзін і той жа тып

Для спасылкавых тыпаў:
a === b вяртае true, калі a і b спасылаюцца на адзін і той жа аб'ект

Для радкоў:
a === b вяртае true, калі a і b з'яўляюцца абедзвюма радкамі і ўтрымліваюць аднолькавыя сімвалы


Радкі: адмысловы выпадак ...

Радкі не зьяўляюцца тыпамі значэнняў, але ў Javascript яны паводзяць сябе як тыпы значэнняў, таму яны будуць "роўныя", калі сімвалы ў радку аднолькавыя і калі яны маюць аднолькавую даўжыню (як растлумачана ў трэцім правіле)

Цяпер становіцца цікава:

 var a = "12" + "3"; var b = "123"; alert(a === b); // returns true, because strings behave like value types 

Але як наконт гэтага ?:

 var a = new String("123"); var b = "123"; alert(a === b); // returns false !! (but they are equal and of the same type) 

Я думаў, што радкі паводзяць сябе як тыпы значэнняў? Ну, гэта залежыць ад таго, каго вы спытаеце ... У гэтым выпадку a і b не зьяўляюцца адным і тым жа тыпам. a мае тып Object , а b мае тып string . Проста памятаеце, што стварэнне радковага аб'екта з выкарыстаннем канструктара string стварае нешта накшталт тыпу Object , якое вялікую частку часу паводзіць сябе як радок.

564
05 июня '09 в 22:11 2009-06-05 22:11 адказ дадзены Philippe Leybaert 05 чэрвеня '09 у 22:11 2009-06-05 22:11

Цікавае графічнае прадстаўленне параўнання роўнасці паміж == і === .

Крыніца: http://dorey.github.io/JavaScript-Equality-Table/


var1 === var2

Пры выкарыстанні === для тэставання роўнасці JavaScript усё як ёсць. Перад ацэнкай нічога не пераўтвараецца.

2019

553
05 мая '14 в 8:21 2014-05-05 08:21 адказ дадзены SNag 05 мая '14 у 08:21 2014/05/05 08:21

Дазвольце мне дадаць гэты савет:

Калі ёсць сумневы, прачытайце спецыфікацыю !

ECMA-262 - гэта спецыфікацыя мовы сцэнарыяў, на якім JavaScript з'яўляецца дыялектам. Вядома, на практыцы важна, як паводзяць сябе самыя важныя браўзэры, чым эзатэрычнае вызначэнне таго, як нешта павінна апрацоўвацца. Але карысна зразумець, чаму новы String ( "a")! == "a".

Калі ласка, дайце мне патлумачыць, як прачытаць спецыфікацыю, каб растлумачыць гэтае пытанне. Я бачу, што ў гэтай вельмі старой тэме ніхто не атрымаў адказу за вельмі дзіўны эфект. Такім чынам, калі вы можаце прачытаць спецыфікацыю, гэта вельмі дапаможа вам у вашай прафесіі. Гэта набытае ўменне. Такім чынам, працягвайце.

Пошук файла PDF для === прыводзіць мяне на старонку 56 спецыфікацыі: 11.9.4. Аператар Strict Equals (===), і пасля праходжання праз спецыфікацыю я знаходжу:

11.9.6 Алгарытм параўнання строгага роўнасці
Параўнанне x === y, дзе x і y - значэння, стварае true або false. Такое параўнанне выконваецца наступным чынам:
1. Калі Type (x) адрозніваецца ад Type (y), вярніце false.
2. Калі тып (x) роўны Undefined, вярніце true.
3. Калі Type (x) - Null, вярніце true.
4. Калі Type (x) не з'яўляецца лікам, перайдзіце да кроку 11.
5. Калі x NaN, вярніце false.
6. Калі y NaN, вярніце false.
7. Калі x - гэта тое ж лікавае значэнне, што і y, вярніце true.
8. Калі x роўна +0, а y роўна -0, вярніце true.
9. Калі x роўна -0 і y роўна +0, вярніце true.
10. Вярнуць false.
11. Калі Type (x) - String, вярніце true, калі x і y - гэта дакладна такая ж паслядоўнасць сімвалаў (аднолькавая даўжыня і аднолькавыя сімвалы ў адпаведных пазіцыях); у адваротным выпадку вярніце false.
12. Калі Type (x) з'яўляецца лагічным, вярніце true, калі x і y абодва true або абодва false; у адваротным выпадку вярніце false.
13. Вярніце true, калі x і y ставяцца да аднаго і таго ж аб'екту або ставяцца да аб'ектаў, звязаных адзін з адным (гл. 13.1.2). У адваротным выпадку вярніце false.

Цікавым з'яўляецца этап 11. Так, радкі разглядаюцца як тыпы значэнняў. Але гэта не тлумачыць, чаму новы String ( "a")! == "a". У нас ёсць браўзэр, які не адпавядае ECMA-262?

Не так хутка!

Праверыць тыпы аперанд. Паспрабуйце самі, абгарнуўшы іх у typeof (). Я выявіў, што новы String ( "a") з'яўляецца аб'ектам, а выкарыстоўваецца крок 1: return false, калі тыпы адрозніваюцца.

Калі вам цікава, чаму новы String ( "a") не вяртае радок, як наконт некаторых практыкаванняў, якія чытаюць спецыфікацыю? Атрымлівайце задавальненне!


Aidiakapi напісаў гэта ў каментары ніжэй:

з спецыфікацыі

11.2.2 Новы аператар:

Калі тып (канструктар) не з'яўляецца аб'ектам, выклічце выключэнне TypeError.

Іншымі словамі, калі String не будзе мець тып Object, ён не можа выкарыстоўвацца з новым аператарам.

new заўсёды вяртае аб'ект, нават для канструктараў Радок. І на жаль! Семантыка значэння для радкоў (гл. Крок 11) губляецца.

І гэта, нарэшце, азначае: новы String ( "a")! == "a".

254
28 нояб. адказ дадзены nalply 28 лістапада. 2009-11-28 21:18 '09 у 21:18 2009-11-28 21:18

У PHP і JavaScript гэта строгі аператар роўнасці. Гэта азначае, што ён будзе параўноўваць тып і значэння.

95
12 мая '10 в 15:58 2010-05-12 15:58 адказ дадзены Shiki 12 мая '10 У 15:58 2010-05-12 15:58

Я тэставаў гэта ў Firefox з дапамогай Firebug , выкарыстоўваючы наступны код:

 console.time("testEquality"); var n = 0; while(true) { n++; if(n==100000) break; } console.timeEnd("testEquality"); 

і

 console.time("testTypeEquality"); var n = 0; while(true) { n++; if(n===100000) break; } console.timeEnd("testTypeEquality"); 

Мае вынікі (правераны пяць разоў і усярэдненыя):

 ==: 115.2 ===: 114.4 

Такім чынам, я б сказаў, што нязначная розніца (гэта больш за 100000 ітэрацый, памятаеце) занядбана малая. Прадукцыйнасць не з'яўляецца прычынай === . Тып бяспекі (ну, як бяспечна, як вы збіраецеся ў JavaScript), і якасць кода.

91
25 дек. адказ дадзены Simon Scarfe 25 снеж. 2008-12-25 14:17 '08 у 14:17 2008-12-25 14:17

У JavaScript гэта азначае адно і тое ж значэнне і тып.

напрыклад,

 4 == "4" // will return true 

але

 4 === "4" // will return false 
88
12 мая '10 в 15:58 2010-05-12 15:58 адказ дадзены Dimitar 12 мая '10 У 15:58 2010-05-12 15:58

Аператар === называецца аператарам строгага параўнання, ён адрозніваецца ад аператара ==.

Возьмем 2 vars a і b.

Для "a == b" для ацэнкі ісціны a і b павінна быць адно значэнне.

У выпадку "a === b" a і b павінны быць аднолькавае значэнне, а таксама таго ж тыпу для яго для ацэнкі ісціны.

Возьмем наступны прыклад

 var a = 1; var b = "1"; if (a == b) //evaluates to true as a and b are both 1 { alert("a == b"); } if (a === b) //evaluates to false as a is not the same type as b { alert("a === b"); } both var a = 1; var b = "1"; if (a == b) //evaluates to true as a and b are both 1 { alert("a == b"); } if (a === b) //evaluates to false as a is not the same type as b { alert("a === b"); } same type as b var a = 1; var b = "1"; if (a == b) //evaluates to true as a and b are both 1 { alert("a == b"); } if (a === b) //evaluates to false as a is not the same type as b { alert("a === b"); } 

У заключэнне; выкарыстанне аператара == можа ацэньвацца як праўдзівае ў сітуацыях, калі вы гэтага не хочаце, таму выкарыстанне аператара === будзе больш бяспечным.

У сцэнары выкарыстання 90% не мае значэння, які з іх вы карыстаецеся, але карысна ведаць розніцу, калі вы атрымліваеце нейкае нечаканае паводзіны ў адзін цудоўны дзень.

77
11 дек. адказ дадзены Doctor Jones 11 снеж. 2008-12-11 17:58 '08 у 17:58 2008-12-11 17:58

Ён правярае, роўныя ці аднолькавыя боку як па тыпу, так і па значэнні.

прыклад:

 '1' === 1 // will return "false" because 'string' is not a 'number' 

Агульны прыклад:

 0 == '' // will be "true", but it very common to want this check to be "false" 

Іншы распаўсюджаны прыклад:

 null == undefined // returns "true", but in most cases a distinction is necessary 
70
12 мая '10 в 15:58 2010-05-12 15:58 адказ дадзены vsync 12 мая '10 У 15:58 2010-05-12 15:58

Чаму == настолькі непрадказальны?

Што вы атрымліваеце, калі параўноўваеце пусты радок "" з нумарам 0 0 ?

<Код> Trueкод>

Так, гэта правільна ў адпаведнасці з == пусты радок, а лікавае нуль - адно і тое ж час.

І гэта не сканчаецца, вось яшчэ адзін:

  '0' == false//true Код> 

Рэчы становяцца вельмі дзіўнымі з масівамі.

  [1] == true//true [] == false//true [[]] == false//true [0] == false//true Код> 

Затым weerder з радкамі

  [1,2,3] == '1,2,3'//true - ДЕЙСТВИТЕЛЬНО?! '\ r\n\t' == 0//true - Давай! Код> 

пагаршаецца:

Калі роўна не адно?

  let A = ''//пустая строка пусть В = 0//нуль пусть C = '0'//нулевая строка A == B//true - ok... B == C//true - пока что так хорошо... A == C//** FALSE ** - Закручивание сюжета! Код> 

Дазвольце мне яшчэ раз сказаць:

  (A == B)(B == C)//true (A == C)//** FALSE ** Код> 

І гэта проста вар'ят матэрыял, які вы атрымліваеце з прымітыўны.

Гэта новы ўзровень вар'яцтва, калі вы карыстаецеся == з аб'ектамі.

У гэты момант вам, напэўна, цікава ...

Чаму гэта адбываецца?

Добра, таму што ў адрозненне ад "трайнога роўнасці" ( === ), які проста правярае, ці супадаюць два значэння.

== робіць цэлую кучу іншых рэчаў.

Ён мае адмысловую апрацоўку для функцый, спецыяльную апрацоўку для нулёў, undefined, радкоў, якія вы называеце.

Гэта становіцца даволі дурным.

На самай справе, калі вы паспрабавалі напісаць функцыю, якая робіць тое, што робіць == , яна будзе выглядаць прыкладна так:

  function isEqual (x, y) {//если `==` были функцией   if (typeof y === typeof x) return y === x;   // обрабатываем null и undefined то же самое   var xIsNothing = (y === undefined) || (y === null);   var yIsNothing = (x === undefined) || (x === null);  если (xIsNothing || yIsNothing) возвращается (xIsNothing  yIsNothing);  if (typeof y === "function" || typeof x === "function" ) {   // если любое значение является строкой   // преобразовать функцию в строку и сравнить   if (typeof x === "string" ) {   return x === y.toString();   } else if (typeof y === "string" ) {   return x.toString() === y;   }   return false;   }  if (typeof x === "object" ) x = toPrimitive (x);   if (typeof y === "object" ) y = toPrimitive (y);   if (typeof y === typeof x) return y === x;  // конвертируем x и y в числа, если они еще не используют трюк +   if (typeof x! == "number" ) x = + x;   if (typeof y! == "number" ) y = + y;   // фактически реальный `==` еще более сложный, чем это, особенно в ES6   return x === y; } функция toPrimitive (obj) {   var value = obj.valueOf();   if (obj! == value) возвращаемое значение;   return obj.toString(); } Код> 

Такім чынам, што гэта значыць?

Гэта азначае, што == з'яўляецца складаным.

Паколькі гэта складана, цяжка зразумець, што адбудзецца, калі вы яго выкарыстоўваеце.

Гэта азначае, што ў вас могуць быць памылкі.

Такім чынам, мараль гэтай гісторыі ...

Зрабіце вашу жыццё менш складанай.

Выкарыстоўвайце === замест == .

Канец.

68
09 авг. адказ дадзены Luis Perez 09 жнів. 2016-08-09 19:50 '16 У 19:50 2016/08/09 19:50

Схема паслядоўнасці выканання Javascript для строгага роўнасці / Параўнанне '==='

2019

05 сент. адказ дадзены Samar Panda 05 сент. 2015-09-05 16:53 '15 у 16:53 2015/09/05 16:53

JavaScript === vs == .

 0==false // true 0===false // false, because they are of a different type 1=="1" // true, auto type coercion 1==="1" // false, because they are of a different type 
52
03 июля '13 в 7:08 2013-07-03 07:08 адказ дадзены user2496033 03 ліпеня '13 у 7:08 2013/07/03 07:08

Гэта азначае роўнасць без прымусу тыпу тып прымусу азначае, што JavaScript ня аўтаматычна канвертуе любыя іншыя тыпы дадзеных у радковыя тыпы дадзеных.

 0==false // true,although they are different types 0===false // false,as they are different types 2=='2' //true,different types,one is string and another is integer but javaScript convert 2 to string by using == operator 2==='2' //false because by using === operator ,javaScript do not convert integer to string 2===2 //true because both have same value and same types 
51
12 мая '10 в 15:59 2010-05-12 15:59 адказ дадзены Pop Catalin 12 мая '10 у 15:59 2010-05-12 15:59

У тыповым script не будзе розніцы ў прадукцыйнасці. Больш важным можа быць той факт, што тысяча "===" складае 1 кілабайт цяжэй, чым тысячы "==" :) профилировщики JavaScript , можа сказаць вам, ці ёсць прадукцыйнасць розніца ў вашым выпадку.

Але асабіста я б зрабіў тое, што прапануе JSLint. Гэтая рэкамендацыя існуе не з-за праблем з прадукцыйнасцю, а з-за абмежаванні тыпу ('\t\r\n' == 0) .

46
16 дек. адказ дадзены Constantin 16 снеж. 2008-12-16 17:29 '08 у 17:29 2008-12-16 17:29

Аператар роўнага параўнання == заблытаны, і яго варта пазбягаць.

Калі вы жывяце з МАЕЦЕ, памятайце наступныя 3 рэчы:

  • Ён не з'яўляецца транзітыўнасць: (a == b) i (b == c) не прыводзіць да (a == c)
  • Ён ўзаемна выключае яго адмаўленне: (a == b) i (a! = B) заўсёды маюць супрацьлеглыя Булевы значэння з усімі a і b.
  • У выпадку сумневаў вывучыце на памяць наступную табліцу праўдзівасці:

Табліца АПЕРАТАРА У JAVASCRIPT

  • Кожны радок у табліцы ўяўляе сабой набор з 3 ўзаемна "роўных" значэнняў, што азначае, што любыя 2 значэння з іх роўныя з выкарыстаннем знака роўнага == *

** STRANGE: звярніце ўвагу, што любыя два значэння ў першым слупку не роўныя ў гэтым сэнсе. **

 '' == 0 == false // Any two values among these 3 ones are equal with the == operator '0' == 0 == false // Also a set of 3 equal values, note that only 0 and false are repeated '\t' == 0 == false // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- '\r' == 0 == false // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- '\n' == 0 == false // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- '\t\r\n' == 0 == false // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- null == undefined // These two "default" values are not-equal to any of the listed values above NaN // NaN is not equal to any thing, even to itself. 
42
16 сент. адказ дадзены CuongHuyTo 16 сент. 2011-09-16 17:25 '11 у 17:25 2011-09-16 17:25

Наўрад ці будзе якая-небудзь розніца ў прадукцыйнасці паміж двума аперацыямі ў вашым выкарыстанні. Няма ніякага пераўтварэнні тыпу, якое павінна быць выканана, таму што абодва параметру ўжо аднаго тыпу. Абедзве аперацыі будуць мець параўнанне тыпаў, за якімі варта параўнанне значэнняў.

35
11 дек. адказ дадзены Sean 11 снеж. 2008-12-11 17:44 '08 у 17:44 2008-12-11 17:44

Да! Гэта мае значэнне.

=== аператар у javascript правярае значэнне, а таксама тып, дзе аператар == проста правярае значэнне (пры неабходнасці пераўтвараецца тып).

2019

35
14 нояб. адказ дадзены Aniket Thakur 14 лістапада. 2014-11-14 09:02 '14 года ў 9:02 2014/11/14 09:02
аператар

=== правярае значэння, а таксама тыпы зменных для роўнасці.

аператар

== проста правярае значэнне зменных для роўнасці.

32
12 мая '10 в 16:03 2010-05-12 16:03 адказ дадзены Niraj CHoubey 12 мая '10 у 16:03 2010-05-12 16:03

Гэта строгі кантрольны тэст.

Гэта добра, асабліва калі вы правяраеце паміж 0 і false і null.

Напрыклад, калі ў вас ёсць:

 $a = 0; 

тады:

 $a==0; $a==NULL; $a==false; 

Усе вяртае true, і вы можаце не жадаць гэтага. Выкажам здагадку, што ў вас ёсць функцыя, якая можа вярнуць 0-й індэкс масіва ці false пры памылцы. Калі вы ўсталюеце сцяжок з "==" false, вы можаце атрымаць заблытаны вынік.

Такім чынам, з тым жа, што і вышэй, але строгі тэст:

 $a = 0; $a===0; // returns true $a===NULL; // returns false $a===false; // returns false 
30
12 мая '10 в 16:19 2010-05-12 16:19 адказ дадзены Daniel 12 мая '10 у 16:19 2010-05-12 16:19

JSLint часам дае нерэалістычныя прычыны для змены матэрыялу. === мае тую ж прадукцыйнасць, што і == , калі тыпы ўжо супадаюць.

Гэта хутчэй, толькі калі тыпы не супадаюць, і ў гэтым выпадку ён не спрабуе канвертаваць тыпы, але вяртае false.

Такім чынам, IMHO, JSLint, магчыма, выкарыстоўваецца для напісання новага кода, але бескарысную празмерную аптымізацыю варта пазбягаць любой цаной.

Сэнс, няма ніякіх прычын для змены == да === ў цесце, напрыклад if (a == 'test') , калі вы гэта ведаеце, паколькі факт можа быць толькі String.

Мадыфікацыя вялікай колькасці кода такім чынам адымае час распрацоўшчыкаў і рэцэнзентаў і нічога не дасягае.

29
05 июня '12 в 10:53 2012-06-05 10:53 адказ дадзены ashes 05 чэрвеня '12 у 10:53 2012-06-05 10:53

проста

== азначае параўнанне паміж аперанда з type conversion

=== азначае параўнанне паміж аперанда без type conversion

Пераўтварэнне тыпаў у javaScript азначае, што javaScript аўтаматычна пераўтворыць любыя іншыя тыпы дадзеных у радковыя тыпы дадзеных.

напрыклад:

 123=='123' //will return true, because JS convert integer 123 to string '123' //as we used '==' operator 123==='123' //will return false, because JS do not convert integer 123 to string //'123' as we used '===' operator 
28
20 марта '15 в 8:05 2015-03-20 08:05 адказ дадзены Amit 20 сакавіка '15 у 08:05 2015/03/20 08:05

Простым прыкладам з'яўляецца

 2 == '2' -> true, values are SAME because of type conversion. 2 === '2' -> false, values are NOT SAME because of no type conversion. 
25
14 мая '15 в 17:45 2015-05-14 17:45 адказ дадзены Vikas 14 мая '15 у 17:45 2015/05/14 17:45

Топ-2 адказаў на абодва згаданых == азначае роўнасць і === азначае ідэнтыфікатар. На жаль, гэта зацвярджэнне няправільна.