İlk olarak, NaN
bunun çok özel bir değer olduğunu belirtmeme izin verin : Tanım olarak, kendisine eşit değildir. Bu, JavaScript numaralarının çizdiği IEEE-754 standardından gelir. "Bir sayı değil" değeri, bitler tam eşleşme olsa bile asla kendisiyle aynı değildir. (Bunlar mutlaka IEEE-754'te değil, birden fazla farklı "sayı değil" değerine izin verir.) Bu yüzden bu bile ortaya çıkıyor; JavaScript'teki diğer tüm değerler kendilerine eşittir NaN
, sadece özeldir.
... JavaScript'te x! == x için true ve x! = x için false döndürecek bir değer eksik mi?
Hayır değilsin. Arasındaki tek fark !==
ve !=
aynı olacak şekilde operand tiplerini almak için gerekirse ikinci tip zorlama yapacak olmasıdır. İçinde x != x
, işlenenlerin türleri aynıdır ve bu yüzden tam olarak aynıdır x !== x
.
Bu Soyut Eşitlik Operasyonunun tanımının başlangıcından itibaren açıktır :
- ReturnIfAbrupt (x) tanımlanmaktadır.
- ReturnIfAbrupt (y).
Tür (x), Tür (y) ile aynıysa,
Sıkı Eşitlik Karşılaştırması yapmanın sonucunu döndürün x === y.
...
İlk iki adım temel tesisattır. Yani aslında, ilk adımı ==
türlerin aynı olup olmadığını görmek ve eğer öyleyse ===
bunun yerine yapmaktır . !=
ve !==
sadece olumsuzlanmış versiyonlarıdır.
Yani eğer Flanagan sadece bu doğru NaN
için de geçerli verecektir x !== x
, eminiz yalnızca o da doğru olabilir ki NaN
için de geçerli verecektir x != x
.
Birçok JavaScript programcısı , gevşek operatörlerin yaptığı tür zorlamasıyla ilgili bazı tuzakları kullanmaktan ===
ve !==
bunlardan kaçınmak için varsayılandır , ancak Flanagan'ın bu durumda katı ve gevşek operatörü kullanması hakkında okunacak hiçbir şey yoktur.
!==
kontrolleri!=
kontrolleri tercih etmesi olabilir . Bildiğim kadarıyla nerede başka bir değeri yokturx != x
. Ancak iki farklı JavaScript geliştirici grubu vardır: hız, netlik, ifade vb. İçin!=
tercih edenler ve tercih edenler!==