İlk olarak, NaNbunun ç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 NaNiçin de geçerli verecektir x !== x, eminiz yalnızca o da doğru olabilir ki NaNiç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!==