SORU
11 Aralık 2008, PERŞEMBE


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
11 Aralık 2008, PERŞEMBE


(===) 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ör false ü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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • ecf150king

    ecf150king

    20 Ocak 2006
  • Google Россия

    Google Ро

    9 Temmuz 2007