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?

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:

Çok sayıda ayrıntıyı birkaç basit çıkarıma indirgemek ve çeşitli durumlarda == veya === kullanıp kullanmayacağınızı bilmenize yardımcı olmak için işte basit kurallarım:

gt; - Bir karşılaştırmada değerlerden biri (diğer bir deyişle taraf) true veya false değeri olabiliyorsa, == kullanmaktan kaçının ve === kullanın.

  • Karşılaştırmadaki değerlerden biri şu belirli değerlerden biri olabiliyorsa (0, "" veya [] -- boş dizi), == değerinden kaçının ve === değerini kullanın.
  • Diğer tüm durumlarda, == kullanmanız güvenlidir. Sadece güvenli olmakla kalmaz, aynı zamanda birçok durumda kodunuzu okunabilirliği artıracak şekilde basitleştirir.

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.

Yorumlar (13)

Dizgi olduklarını biliyorsanız, türlerini kontrol etmenize gerek yoktur.

"a" == "b"

Ancak, dize nesnelerinin eşit olmayacağını unutmayın.

new String("a") == new String("a")

yanlış dönecektir.

String nesneleri için bir ilkele dönüştürmek üzere valueOf() yöntemini çağırın,

new String("a").valueOf() == new String("a").valueOf()

doğru dönecektir

Yorumlar (6)

Aslında javascript'te dizelerin oluşturulabileceği iki yol vardır.

  1. var str = 'Javascript'; Bu, ilkel bir dize değeri oluşturur.

  2. var obj = new String('Javascript'); Bu bir sarmalayıcı nesne oluşturur türünde String.

    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.

new String('javascript').valueOf() == new String('javascript').valueOf()
Yorumlar (0)