Operatörü (== vs ===) eşittir konuda ben JavaScript karşılaştırmalar kullanır mı?
Kullanıyorum JSLint geçmek JavaScript ve dönen birçok öneri değiştirmek için ==
(iki eşittir işaretleri) ===
(üç eşittir işaretleri) ne zaman bir şeyler yapmak gibi karşılaştırma idSele_UNVEHtype.value.length == 0
içinde if
deyim.
===
==
değiştirilmesi için bir performans yararı var mı?
Herhangi bir performans artışı birçok karşılaştırma operatörleri mevcut olarak memnuniyetle karşılanacaktır.
Eğer herhangi bir tür dönüşüm gerçekleşirse, ==
üzerinde bir performans kazancı var mı?
CEVAP
(===
) kimlik operatör dönüşüm yapılır hiçbir türü dışında eşitlik (==
) operatörü için davranır ve türleri eşit olarak kabul edilmesi için aynı olmalıdır.
Referans: Javascript Tutorial: Comparison Operators
==
operatör eşitlik için karşılaştırırgerekli tip dönüşümlerini yaptıktan sonra. ===
operatör olacakdeğilbu dönüşüm, bu yüzden eğer iki değer ===
sadece false
döner aynı tip değildir. ===
daha hızlı olacak, ve ==
daha farklı bir sonuç olabilir bu durum. Tüm diğer durumlarda performans aynı olacaktır.
Douglas Crockford alıntı 45 ** mükemmel
JavaScript eşitlik operatörleri iki takım vardır:
===
* *19, ve onların kötü İkizler==
!=
. İyi olanlar beklediğiniz şekilde çalışır. İki işlenen aynı türde ve aynı değeri varsa, o zaman===
true
üretir ve!==
false
üretir. Şeytani İkizler işlenen aynı tür zaman doğru şeyi yapmak, ama eğer farklı olurlarsa, değerlerini ikna etmeye çalışırlar. karmaşık ve kolay unutulan bu hangi onlar kuralları. Bu ilginç durumlar şunlardır:'' == '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
Geçişlilik eksikliği endişe verici. Benim tavsiyem asla kötü İkizler kullanmaktır. Bunun yerine, her zaman
===
!==
kullanın. Karşılaştırmalar sadece gösterilen tüm===
operatörfalse
üretmek.
Güncelleme:
İyi bir nokta@Phillipe Laybaert's answer başvuru ile ilgili her türlü yorum ve @Casebash tarafından yetiştirildi. Başvuru türleri için ==
===
sürekli birbirleriyle (özel durumlar dışında) hareket.
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
Özel durum bir edebi karşılaştırmak toString
valueOf
yöntemi nedeniyle aynı değişmez veren herhangi bir nesne ile. Örneğin, bir string nesnesi String
kurucu tarafından oluşturulan edebi karşılaştırılması düşünün.
"abc" == new String("abc") // true
"abc" === new String("abc") // false
==
burada operatör iki nesne değerlerini kontrol ediyor ve true
ama ===
dönen aynı tür olmadıklarını görmek ve false
dönüyor. Hangisi doğru? Gerçekten karşılaştırmak için çalışıyoruz ne bağlıdır. Benim tavsiyem soru tamamen atlamak ve string nesneleri oluşturma String
kurucu kullanmayın.
Başvuru
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
Bu nedir !! JavaScript? (değil) operat...
JavaScript örneğin operatörü nedir?...
Neden kürek operatörü (&;< lt;) ruby...
Orada bir C# büyük / küçük harf duyarl...
orada bir Java boş birleşiyor operatör...