Daha
JavaScript'te dize eşitliğini kontrol etmenin doğru yolu nedir?
JavaScript'te String'ler arasında eşitlik kontrolü yapmanın doğru yolu nedir?
787
3
always
==
ve===
operatörlerini kullanmanın farklarını ve sonuçlarını tam olarak anlayana kadar, sizi belirsiz (açık olmayan) hatalardan ve WTF'lerden kurtaracağı için===
operatörünü kullanın. Normal"==
operatörü, dahili tip zorlaması nedeniyle çok beklenmedik sonuçlara yol açabilir, bu nedenle===
operatörünü kullanmak her zaman önerilen yaklaşımdır.Bu ve Javascript'in diğer "iyi ve kötü" kısımları hakkında fikir edinmek için Bay Douglas Crockford'u ve çalışmalarını okuyun. Birçok iyi bilgiyi özetlediği harika bir Google Tech Talk var: [http://www.youtube.com/watch?v=hQVTIJBZook][1]
Güncelleme:
Kyle Simpson'ın You Don't Know JS serisi mükemmeldir (ve çevrimiçi olarak okunması ücretsizdir). Seri, dilin yaygın olarak yanlış anlaşılan alanlarına giriyor ve Crockford'un kaçınmanızı önerdiği "kötü kısımları" açıklıyor. Bunları anlayarak doğru şekilde kullanabilir ve tuzaklardan kaçınabilirsiniz.
"Up & Going" kitabında Equality ile ilgili bir bölüm bulunmaktadır ve bu bölümde gevşek (
==
) ve katı (===
) operatörlerinin ne zaman kullanılacağına ilişkin özel bir özet yer almaktadır:Javascript'i gerçekten anlamak için zaman ayırmak istemeyen geliştiriciler için Crockford'un konuşmasını hala tavsiye ediyorum—sadece ara sıra Javascript'te çalışan bir geliştirici için iyi bir tavsiye.
Dizgi olduklarını biliyorsanız, türlerini kontrol etmenize gerek yoktur.
Ancak, dize nesnelerinin eşit olmayacağını unutmayın.
yanlış dönecektir.
String nesneleri için bir ilkele dönüştürmek üzere valueOf() yöntemini çağırın,
doğru dönecektir
Aslında javascript'te dizelerin oluşturulabileceği iki yol vardır.
var str = 'Javascript';
Bu, ilkel bir dize değeri oluşturur.var obj = new String('Javascript');
Bu bir sarmalayıcı nesne oluşturur türündeString
.typeof str // string
typeof obj // nesne
Bu nedenle, eşitliği kontrol etmenin en iyi yolu
===
operatörünü kullanmaktır çünkü her iki operandın türünün yanı sıra değerini de kontrol eder.İki nesne arasındaki eşitliği kontrol etmek istiyorsanız,
String.prototype.valueOf
kullanmak doğru yoldur.