Hansı operator bərabərdir (== vs ===) JavaScript müqayisədə istifadə olunacaq?

JSLint'i JavaScript-dən keçmək üçün istifadə edir və müqayisə idSele_UNVEHtype.value.length == 0 içərisində bir şey etdiyiniz zaman === (iki bərabər əlamətləri) === (üç bərabər əlamət) ilə əvəz etmək üçün çox cümlələri qaytarır operator if .

== dən === əvəz etmək üçün bir performans üstünlüyü varmı?

Çox müqayisə operatorları olduğu üçün hər hansı bir performans təkmilləşdirilməsi xoş olacaq.

Tip dönüşümü meydana gəlməsə, qazanc == ilə müqayisə olunacaqmı?

5673
11 дек. bcasp tərəfindən müəyyən 11 dekabr 2008-12-11 17:19 '08 at 17:19 2008-12-11 17:19
ответ 51 cavab
  • 1
  • 2

Kimlik operatoru ( === ), növün konvertasiyası yerinə yetirilməmiş və bərabər hesab edilməli olan növlər istisna olmaqla bərabərlik operatoruna ( == ) eyni şəkildə davranır.

Referans: Javascript Tutorial: Müqayisəli Operatorlar

== operator istənilən növ tipli dönüşümlərdən sonra bərabərlik müqayisə edəcək. === Operator, dönüşümünü yerinə yetirməyəcək, belə ki, əgər iki dəyər uyğun === , onda === sadəcə false . Hər ikisi eyni dərəcədə sürətlidır.

Sitat Douglas Crockford əla javascript: yaxşı hissələr ,

JavaScript-də, iki bərabərlik operatoru var: ===!== və onların pis əkizləri ==!= . Yaxşı olanlar sizin gözləndiyiniz şəkildə işləyirlər. Eyni tipli iki operand eyni dəyərə malikdirsə, onda === true!== false yaradır. Əzizlər eyni işdə olduqda, pis əməllər düzgündür, amma fərqli növləri varsa, dəyərləri tətbiq etməyə çalışırlar. mürəkkəb və həlledici olan qaydaları. Burada maraqlı hadisələrdən bəziləri:

 '' == '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 

Transitiviyanın olmaması narahatdır. Mənim məsləhətim heç vaxt pis əkizlərdən istifadə etməkdir. Bunun əvəzinə, hər zaman ===!== istifadə edin. Yuxarıda göstərilən müqayisələrin hamısı operator === ilə false göstərmişdir.


Yeniləmə:

Yaxşı bir nöqtə şərhdə @ Casebash və referans növləri ilə @Phillipe Laybaert tərəfindən qaldırıldı. Referans tipləri üçün ===== bir-biri ilə ardıcıl hərəkət edirlər (xüsusi halda istisna olmaqla).

 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 

Xüsusi bir vəziyyət, literal və ya valueOf ilə eyni toString qiymətləndirən obyektlə müqayisə edilir. Məsələn, String konstruktoru tərəfindən yaradılan bir dize obyekti ilə simli literal müqayisə etməyi düşünün.

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

Burada == operator iki obyektin dəyərlərini yoxlayır və true qaytarır, lakin === onlar eyni növdən deyil və false qayıtdığını görür. Hansı biri doğru? Bu, həqiqətən, müqayisə etməyə çalışdığınız şeydən asılıdır. Mənim məsləhətim tamamilə sualdan kənarlaşdırmaq və simli obyektləri yaratmaq üçün String istifadə etməyin.

Referans
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

5840
11 дек. Bill 11- də Lizard tərəfindən verilmiş cavab 2008-12-11 17:25 '08 at 5:25 pm 2008-12-11 17:25

== operatoru istifadə edərək (bərabərlik)

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

Operatordan istifadə etmək === (Identity)

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

Bu, bərabərlik operatorunun == məcburiyyət növünə malik olması ilə bağlıdır, yəni tərcüməçi müqayisədən əvvəl dəyərləri konvertasiya etməyə çalışır.

Digər tərəfdən, Identity === operator bir məcburi növü yerinə yetirmir və müqayisə edərkən dəyərləri çevirir.

1016
11 дек. Cavab Andreas Grech tərəfindən verilir 11 dekabr. 2008-12-11 17:33 '08 at 17:33 2008-12-11 17:33

Cavablarda mənə bərabər vasitələr haqqında heç bir şey oxumadım. Bəziləri deyir ki, === bərabər və eyni tipli deməkdir, amma bu deyil. Əslində, bu hər iki operator eyni obyektə aiddir və ya dəyər növləri halında eyni dəyəri var .

Beləliklə, aşağıdakı kodu götürək:

 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 

Eyni burada:

 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 

Və ya hətta:

 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 

Bu davranış həmişə aydın deyil. Hekayə bərabər və eyni tipdən daha çoxdur.

Qaydalar:

Qiymət növləri (nömrələri) üçün:
a === b b eyni qiymətə sahib olduqda və eyni tipə malik olduqda doğru olur

Referans növləri üçün:
a === bb eyni obyektə istinad edərsə a === b doğru qaytarır.

Dizələr üçün:
a === bb hər ikisi strings və eyni simvollar varsa, a === b doğru qaytarır.


Strings: xüsusi vəziyyət ...

Strings dəyər növləri deyil, lakin Javascript-da dəyər növləri kimi davranırlar, beləliklə simli simvollar eyni olduqda və onlar eyni uzunluq olduqda (üçüncü qayda izah edildiyi kimi) "bərabərdirlər"

İndi maraqlı olur:

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

Amma necə?

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

Mən strings dəyər növləri kimi davranmaq düşündüm? Bəli, soruşduğunuz kimdən asılıdır ... Bu halda a və b eyni tip deyil. a Object növüdür, b isə tipli string . Yalnız string konstruktordan istifadə edərək simli bir obyekt yaratmaq xatırlayıram ki, bir simli vaxtın əksəriyyətini özündə əks etdirən tipli Object kimi bir şey yaradır.

564
05 июня '09 в 22:11 2009-06-05 22:11 05.06.2009 tarixində 10:11 'də Philippe Leybaert' a cavab verən 2009-06-05 22:11

===== arasındakı bərabərliyin müqayisəsinin maraqlı bir qrafik təsviri.

Mənbə: http://dorey.github.io/JavaScript-Equality-Table/


var1 === var2

JavaScript bərabərliyi test etmək üçün === istifadə edərkən, hər şey olduğu kimi. Qiymətdən əvvəl heç bir şey çevrilmir.

2019

553
05 мая '14 в 8:21 2014-05-05 08:21 cavab 05.05.2014 tarixində SNag tərəfindən 08:21 2014-05-05 08:21 tərəfindən verilir

Bu ipucu əlavə edim:

Şübhə halında, spesifikasiyası oxuyun!

ECMA-262 JavaScript-nin bir dialekt olduğu bir skript dili tərifi. Əlbəttə ki, praktikada ən vacib brauzerlərin necə davranılması lazım olduğunu ezoterik tərifdən daha çox necə davranması vacibdir. Ancaq yeni String ("a") niyə başa düşmək faydalıdır ! == "a" .

Xahiş edirəm, bu məsələni aydınlaşdırmaq üçün spesifikasiyanı necə oxumağımı izah edim. Görürəm ki, bu çox köhnə mövzuda kimsənin çox qəribə bir təsiri var. Belə ki, spesifikasiyanı oxuya bilsəniz, bu sizin peşinizdə çox kömək edəcəkdir. Bu əldə bacarıqdır. Beləliklə, davam edin.

=== üçün bir PDF faylını tapmaq məni dəqiqləşdirmənin 56-cı səhifəsinə çıxarır: 11.9.4. Operator Güclü bərabərdir (===) və spesifikasiya keçdikdən sonra mən tapıram:

11.9.6 Qəti bərabərlik müqayisəsi alqoritmi
X = y y müqayisə, burada x və y dəyərlərdir, doğru və ya yalan yaradır. Belə müqayisə aşağıdakı kimi aparılır:
1. Tip (x) Tip (y) -dən fərqli olduqda, yanlış qaytar .
2. Tip (x) Tanımlanmamışsa, həqiqətə dön.
3. Tip (x) Null olduqda, həqiqəti qaytarın.
4. Tip (x) bir nömrə deyilsə, 11 addım atlayın.
5. Əgər x, NaN , səhv dönün.
6. Əgər y NaN , yalana dönsəniz .
7. Əgər x, y olduğu kimi eyni ədədi dəyərə bərabərdirsə, həqiqətə qayıdır.
8. x + 0 və y -0 olduqda, həqiqətə dön.
9. x -0 və y +0 olduqda, geriyə dön.
10. Yanlış qayıtmaq.
11. Tip (x) String ise, x və y tam eyni xarakterli ardıcıllıq olduqda (müvafiq mövqedən eyni uzunluq və eyni xarakterli olduqda) həqiqəti qaytarın; Əks halda, yalançı olur .
12. Əgər Tip (x) booleansa, x və y hər ikisi həqiqi və ya hər ikisi səhvdirsə, həqiqəti qaytarın; Əks halda, yalançı olur .
13. x və y eyni obyektə aid olduqda və ya bir-birinə əlaqəli obyektlərlə əlaqəli olduqda (13.1.2) baxın. Əks təqdirdə yalana dön.

Mərhələ 11 maraqlıdır, bəli, strings dəyər növləri kimi qəbul edilir. Lakin bu yeni String ("a") niyə açıqlanmır ! == "a" . ECMA-262 olmayan bir brauzer varmı?

Çox sürətli deyil!

Əməliyyat növlərini yoxlayın. Typeof () 'da onları sarararaq özünüzü sınayın. Yeni String ("a") bir obyekt olduğunu və 1-ci addımın istifadə etdiyini tapdım: əgər növlər fərqli olsa yalanı qaytarın.

Yeni String ("a") bir simli dönməyəcəyini merak edərsənsə, spesifikasiyanı oxuyan bəzi təlimlər necədir? Əylən!


Aidiakapi bunu bir şərhdə yazmışdır:

Texnikadan

11.2.2 Yeni operator :

Tip (konstruktor) bir obyekt deyilsə, bir TypeError istisna qaldırın.

Başqa sözlə, əgər String növü obyekt deyilsə, yeni operator ilə istifadə edilə bilməz.

yeni həmişə bir simli konstruktorlar üçün bir obyekt qaytarır. Və təəssüf! Dizələr üçün dəyərin semantikası (11-ci bəndə baxın) itirilmişdır.

Və bu nəhayət deməkdir: yeni String ("a")! == "a" .

254
28 нояб. Cavab nalply verilir 28 noyabr. 2009-11-28 21:18 '09 at 21:18 'da 2009-11-28 21:18

PHP və JavaScript-də bu, ciddi bir bərabərlik operatorudur. Bu, bu tip və dəyərləri müqayisə edəcək deməkdir.

95
12 мая '10 в 15:58 2010-05-12 15:58 cavab 12 May 'da Shiki tərəfindən verilir '10 da 15:58 2010-05-12 15:58

Firefox'ta Firebug istifadə edərək, aşağıdakı kodu istifadə edərək test etdim:

 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"); 

Mənim nəticələrim (beş dəfə və orta hesabla yoxlanılıb):

 ==: 115.2 ===: 114.4 

Yəni demək olar ki, bir az fərq (bu 100.000-dən çox iterasiya, xatırlamaqdır) çox az sayılır. Performans səbəb deyil === . Təhlükəsizlik növü (yaxşı, javascriptə gedir kimi təhlükəsizdir) və kodun keyfiyyəti

91
25 дек. Cavab 25 dekabrda Simon Scarfe tərəfindən verilir. 2008-12-25 14:17 '08 at 2:17 pm 2008-12-25 14:17

JavaScript-də, bu eyni dəyər və tip deməkdir.

Məsələn,

 4 == "4" // will return true 

lakin

 4 === "4" // will return false 
88
12 мая '10 в 15:58 2010-05-12 15:58 cavab 12 May 'da Dimitar tərəfindən verilir ' 10' da 15:58 2010-05-12 15:58

=== Operator ciddi müqayisəli operator deyilir, == operatordan fərqlidir .

2 vars a və b edin.

A və b-nin həqiqətini qiymətləndirmək üçün "a = b" üçün bir dəyər olmalıdır.

A = b b halda a və b həqiqəti qiymətləndirmək üçün eyni dəyərieyni dəyər olmalıdır.

Aşağıdakı nümunəyə baxın

 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"); } 

Nəticədə ; == operatoru istifadə etmək istəmədiyiniz hallarda doğru hesab edilə bilər, belə ki === operator istifadə edərək daha təhlükəsiz olacaq.

90% istifadə ssenarisində, hansı istifadə etdiyiniz əhəmiyyətli deyil, ancaq bir gün gözlənilməz bir davranış aldığınız zaman fərqi bilmək faydalıdır.

77
11 дек. Cavab Doktor Jones tərəfindən verilmişdir 11 dekabr. 2008-12-11 17:58 '08 saat 05:58 pm 2008-12-11 17:58

Eyni tərəflərin tipdəyərdə bərabər olub olmadığını yoxlayır.

Məsələn:

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

Ümumi nümunə:

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

Digər ümumi nümunə:

 null == undefined // returns "true", but in most cases a distinction is necessary 
70
12 мая '10 в 15:58 2010-05-12 15:58 cavab 12 may 2010- cu il saat 15 : 58-vsync tərəfindən verilmişdir

Niyə == çox gözlənilməz?

Boş simli "" 0 0 ilə müqayisə edərkən nə əldə edirsiniz?

<code> Truecode>

Bəli, bu, == boş bir dize uyğun olaraq düzgündür və sayısal sıfır eyni zamanda.

Bu da burada bitmir, başqa bir:

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

Şeylər dizilerle çox qəribə olur.

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

Sonra strings ilə weerder

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

Daha pisləşmək:

Zaman bərabər deyil?

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

Yenə də deyim:

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

Və bu, ibtidai vasitələrlə əldə etdiyiniz çılpaq bir şeydir.

Bu obyektlərlə == istifadə edərkən yeni bir dəlilik səviyyəsi.

Bu nöqtədə, ehtimal ki möcüzə ...

Niyə bu baş verir?

Yaxşı, çünki iki dəyərin uyğun olub olmadığını yoxlayan "üçlük bərabərlik" ( === ) fərqli olaraq.

== digər şeylərdən ibarətdir .

Funksiyalar üçün xüsusi emal, sıfırlar üçün xüsusi emal, undefined, strings, sizə zəng edir.

Bu olduqca lal olur.

Əslində, nə etdiyinizi yerinə yetirən bir funksiyanı yazmağa == bu bir şeyə bənzəyir:

  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(); } Код> 

Yəni bu nə deməkdir?

Bu, == kompleksdir.

Zor olduğu üçün onu istifadə edərkən nə baş verəcəyini anlamaq çətindir.

Bu, səhvləriniz ola bilər.

Beləliklə, hekayənin mənəvi ...

Həyatınızı daha az mürəkkəbləşdirin.

== əvəzinə == istifadə edin.

Axırıncı.

68
09 авг. Cavab Luis Perez 09 avqustda verilir. 2016-08-09 19:50 '16 saat 19:50 'da 2016-08-09 19:50

Səviyyəli bərabərlik üçün Javascript icra sırası diaqramı / müqayisə '==='

2019

05 сент. cavab Samar Panda 05 Sentyabr verilir. 2015-09-05 16:53 '15 'da 16:53' de, 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 cavab 03 iyul 2013 - cü il saat 07 : 07 -da user2496033 tərəfindən verilmişdir 2013-07-03 07:08

Bu, təzyiq növü olmayan bərabərliyi deməkdir.Məhkəmə növü, JavaScript-nin avtomatik olaraq məlumat növlərinə daşıyan digər məlumat növlərini avtomatik olaraq çevirməyəcəyini bildirir.

 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 Cavab 12 may, 12 may 2010 tarixində saat 15: 59-da Pop Catalin tərəfindən verilir

Tipik bir skriptdə performansdan heç bir fərq olmayacaq. Ən əsası isə, min "===" 1 kilobaytdan çoxdur "" == "dən çox ağırdır :) JavaScript profilçiləri sizin vəziyyətinizdə bir performans fərqi varmı deyə bilərlər.

Amma şəxsən, JSLint'in təklif etdiyi şeyi edərdim. Bu tövsiyə performans problemləri ilə deyil, bir növ məhdudiyyətə görə ('\t\r\n' == 0) .

46
16 дек. cavab verildi Constantin 16 dec. 2008-12-16 17:29 '08 saat 05:29 'de 2008-12-16 17:29

Bərabər müqayisəli operator == səhv edir və qarşısını almaq lazımdır.

VAR ilə yaşasanız , aşağıdakı 3 şeyi yadda saxlayın:

  • Bu keçid deyil: (a == b) və (b == c) nəticə vermir (a == c)
  • Bu bir-birinə bərabərdir: (a == b) və (a! = B) həmişə a və b ilə qarşı-qarşıya Boolean dəyərləri var.
  • Şübhə doğurarkən, aşağıdakı həqiqət masasını yadda saxlayır:

JAVASCRIPT'IN SƏHİFƏLİ OPERATORUNUN TƏQDİMATI

  • Cədvəldə hər bir sıra 3 bərabər "bərabər" dəyərlərdən ibarətdir, yəni hər hansı 2 dəyərinin bərabər == * işarəsi ilə bərabərdir

** STRANGE: ilk sütundakı hər hansı iki dəyər bu mənada bərabər olmadığını qeyd edin. **

 '' == 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 tərəfindən verilmiş cavab 16 sentyabr 2011-09-16 17:25 '11 'də 17:25' də 2011-09-16 17:25

Istifadənizdə iki əməliyyatlar arasında hər hansı bir performans fərqi yoxdur. Hər iki növ parametr eyni tipdə olduğundan, yerinə yetirilmək üçün heç bir növ dönüşüm yoxdur. Hər iki əməliyyata bir qiymət müqayisə edildikdən sonra bir növü müqayisə veriləcəkdir.

35
11 дек. cavab verildi Sean 11 Dek 2008-12-11 17:44 '08 at 17:44 2008-12-11 17:44

Bəli Bu vacibdir.

Javascript === operator dəyəri, həmçinin operatorun == sadəcə dəyəri yoxlayır (lazım olduqda növü çevirir) növü, yoxlayır.

2019

35
14 нояб. Aniket Thakur tərəfindən verilmiş cavab 14 noyabr 2014-11-14 09:02 '14 'da 9:02 2014-11-14 09:02
Operator

=== bərabərlik üçün dəyişənlərin dəyərlərini yoxlayır.

Operator

== bərabərlik üçün dəyişənlərin dəyərini yoxlayır.

32
12 мая '10 в 16:03 2010-05-12 16:03 cavab Niraj Choubey tərəfindən 12 May 'da 16:03' da verilir. 2010-05-12 16:03

Bu ciddi sınaq testidir.

Bu, yaxşıdır, xüsusilə də 0 və yanlış və null arasında olub.

Məsələn, əgər varsa:

 $a = 0; 

Sonra:

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

Hər şey həqiqətə qaytarılır və istəməyəcəksiniz. 0 array indeksini və səhvən yalana dönə biləcək bir funksiyanı düşünsən. Qutunu "==" yanlışla yoxlasanız, bir çaşqın nəticə əldə edə bilərsiniz.

Beləliklə, yuxarıda olduğu kimi eyni, lakin ciddi bir test:

 $a = 0; $a===0; // returns true $a===NULL; // returns false $a===false; // returns false 
30
12 мая '10 в 16:19 2010-05-12 16:19 Cavab 12 aprel 2012-ci il saat 16: 19-da Danielə verildi. 2010-05-12 16:19

JSLint bəzən materialın dəyişdirilməsi üçün qeyri-real səbəblər verir. === əvvəlcədən uyğun olduqda == eyni göstəriciyə malikdir.

Bu, yalnız növlər bir-birinə uyğun olmadıqda daha sürətli olur, bu halda növləri çevirməyə çalışmır, lakin yanlış qaytarır.

Beləliklə, IMHO, JSLint yeni kod yazmaq üçün istifadə oluna bilər, lakin bütün xərclərdən faydasız üstündən optimallaşdırılmamalıdır.

Anlam, testdə == dəyişmək üçün heç bir səbəb yoxdur, məsələn if (a == 'test') , bildiyiniz zaman, çünki fakt bir String ola bilər.

Bu şəkildə kodun böyük bir hissəsini dəyişdirmək developers və nəzərdən keçiricilərin vaxtını alır və heç bir şeyə nail ola bilmir.

29
05 июня '12 в 10:53 2012-06-05 10:53 05 iyun '10' da saat 10:53 'da külü verildi. 2012-06-05 10:53

Yalnız

== type conversion əmrlər arasında bir müqayisə deməkdir

=== type conversion dönüşümsüz işləklər arasında müqayisə deməkdir

JavaScript tipində dönüşüm javaScript avtomatik olaraq hər hansı digər məlumat növləri datanın məlumat növlərinə çevrilməsini nəzərdə tutur.

Məsələn:

 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 mart '15 saat 08:05 'da cavab verilir

Sadə bir nümunədir

 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 cavab 14.05.2014 tarixində 17: 45-də Vikas tərəfindən verilir

Hər ikisi üçün də yuxarıdakı 2 cavab == bərabərliyi və === identifikator deməkdir. Təəssüf ki, bu bəyanat səhvdir.

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

 var a = [1, 2, 3]; var b = [1, 2, 3]; console.log(a == b) // false console.log(a === b) // false 

В приведенном выше коде оба == и === получают false, потому что a и b не являются одними и теми же объектами.

Чтобы сказать: если оба операнда из == являются объектами, == ведет себя так же, как ===, что также означает идентификацию. Существенным отличием этих двух операторов является преобразование типов. == имеет преобразование, прежде чем он проверит равенство, но === не делает.

23
ответ дан Harry He 09 сент. '13 в 11:31 2013-09-09 11:31

Как правило, я обычно использовал === вместо ==!== вместо != ).

Причины объясняются в ответах выше, а также Дуглас Крокфорд довольно ясно об этом ( JavaScript: Хорошие части ).

Однако существует одно исключение : == null - эффективный способ проверить, что 'равно null или undefined':

 if( value == null ){ // value is either null or undefined } 

Например, jQuery 1.9.1 использует этот шаблон 43 раза, а руководство по стилю jQuery :

Строгие проверки равенства (===) должны использоваться в пользу ==. Единственный Исключение составляет при проверке для undefined и null с помощью null.

 // Check for both undefined and null values, for some important reason. undefOrNull == null; 
22
ответ дан mar10 27 апр. '13 в 17:15 2013-04-27 17:15

В базовая ссылка javascript

=== Возвращает true , если операнды строго равны (см. выше) без преобразования типа.

22
ответ дан Paul Butcher 12 мая '10 в 15:59 2010-05-12 15:59

Проблема в том, что вы можете легко попасть в неприятности, поскольку JavaScript имеет много неявных преобразований, смысл...

 var x = 0; var isTrue = x == null; var isFalse = x === null; 

Которая довольно скоро становится проблемой. Лучший пример того, почему неявное преобразование является "злым", можно извлечь из этого кода в MFC /С++, который будет скомпилирован из-за неявного преобразования из CString to HANDLE, который является типом typedef указателя...

 CString x; delete x; 

Что явно во время выполнения делает очень undefined вещи...

Google для неявных преобразований в С++ и STL , чтобы получить некоторые аргументы против него...

21
ответ дан Thomas Hansen 29 дек. '09 в 14:54 2008-12-29 14:54

Сравнение равенства:

Оператор ==

Возвращает true, когда оба операнда равны. Перед сопоставлением операнды преобразуются в один тип.

 >>> 1 == 1 true >>> 1 == 2 false >>> 1 == '1' true 

Сравнение уровней и типов:

Оператор ===

Возвращает true, если оба операнда равны и одного типа. Это вообще лучше и безопаснее, если вы сравните этот путь, потому что нет конверсий типа "за кадром".

 >>> 1 === '1' false >>> 1 === 1 true 
20
ответ дан user2601995 03 окт. '13 в 0:54 2013-10-03 00:54

* Операторы === vs == *

 1 == true => true true == true => true 1 === true => false true === true => true 
18
ответ дан Mr.G 19 марта '14 в 15:08 2014-03-19 15:08

null и undefined - небытие, то есть

 var a; var b = null; 

Здесь a и b не имеют значений. Принимая во внимание, что 0, false и '' - все значения. Одно из них заключается в том, что все они являются ложными значениями, а это означает, что все удовлетворяют условиям фальшивости .

Итак, 0, false и 'вместе образуют подгруппу. А с другой стороны, null и undefined образуют вторую подгруппу. Проверьте сравнения в приведенном ниже изображении. null и undefined. Остальные три будут равны друг другу. Но все они рассматриваются как фальшивые условия в JavaScript.

2019

18
ответ дан vivek_nk 14 апр. '14 в 12:28 2014-04-14 12:28
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос