JavaScript'te çalışırken çok eğlenceliydi . Her gün onunla etkileşime giren geliştiriciler için bile, dilin bazı kısımları keşfedilmemiş olarak kalır. JavaScript hakkında bilmediğiniz yedi şeyi vurgulayacağım.
Genellikle sıfırın pozitif değerini kullanırız. Ama bir de -0 var! Nasıl dizildiklerinden dolayı, onları konsolda göremezsiniz:
Bunun nedeni, (-0) .toString () ve (+0) .toString () öğesinin 0 olmasıdır.
Biraz daha derine inerek, aslında eşit olduklarını öğreniyoruz:
Ayrıca, indexOf'u çok fazla yardımcı olmayacak olan diziler üzerinde kullanmaya çalışırsak (eğer indexOf katı eşit kullanır:
Bir değerin negatif bir sıfır olup olmadığını öğrenmek için bir yol vardır: Pozitif ve sınırlı bir sayıyı bu değere bölerek:
Yani, basitçe şunu söyleyebiliriz:
2. NaN (Sayı Değil) Özel Bir Sayıdır
Evet, NaN olan bir sayı:
Thre bunu elde etmemizin birkaç yolu:
Gerçek şu ki, bu özel bir sayıdır.
Eğer (x! == x) {…} gibi bir şey gördüyseniz, şimdi orada neler olduğunu anlayacaksınız.
Kısacası, NaN NaN eşit değil!
Bir yan etki, bir diziye bir NaN değerinin dizinini bulmak istiyorsanız indexOf kullanmazsınız:
Eğer x'in NaN olup olmadığını bulmak için x! == x olup olmadığını kontrol etmek yerine isNaN (x) 'i kullanabilirsiniz, ancak bu biraz daha yavaştır.
Ama neden bu? Kolay yanıt, bu davranışın IEEE 754 tarafından belirlendiğidir:
Her NaN, kendisi de dahil olmak üzere, her şeyi sıralanmamış olarak karşılaştırır.
İpucu : ES2015 kullanıyorsanız, NaN kasasını ele alır:
NaN sonlu bir sayı değildir. Yani yok değil sonsuz olduğu anlamına gelir. Bu sadece sonlu veya sonsuz değil.
NaN NaN'dir. + NaN veya -NaN yoktur. Her ikisi de NaN'dir:
Bu oldukça anormal bir durumdur, ancak bitsel operatörler JavaScript’te desteklendiğinden, bunları kullanarak bazı güzel şeyler göstereceğim.
Kullanım durumu, büyük bir tuvalde karmaşık 3D animasyonlar oluşturmak istediğinizde olabilir. Çerçeveleri mümkün olduğunca çabuk üretmek ve render etmek istiyorsunuz. Oraya biraz matematik ihtiyacınız olduğunu varsayalım (şüphesiz).
Bir şeyi 2, 4, 8, 16 veya 2'nin herhangi bir gücü ile çarpmak / bölmek istediğinizde, numaralar bitlerin bitlerini sağa (bölme) veya sola (çarpma) hareket ettiren bitsel operatörleri kullanmaktır. ).
<< işleci, tüm bitleri sol bir konuma taşır. Sayılar ikili formda gösterilir, bu nedenle sağ tarafta yeni bir 0 ekler:
>> operatörü kullanırken benzer şeyler olur.
Testlerimden bu << değerini kullanmak, * operatörünü kullanmaktan yaklaşık 1.04 kat daha hızlıdır. Böyle küçük bir hız farkı için insan tarafından okunabilir kodu feda etmek isteyip istemediğinizden emin değilsiniz. Olabilir. Her neyse, bilmek güzel.
XOR (^) operatörü, kriptografide kullanılır. Mesajları kullanarak şifreleyebilir ve şifreleyebilirsiniz. İşte nasıl çalışır:
Basit bir örnek, bir sayıyı şifreleyip şifresini çözer:
Bitwise NOT (~) operatörünü kullanarak, bir dizide bir elemanın görünüp görünmediğini kolayca kontrol edebiliriz.
Bu operatör -1'i 0'a çevirir (dahili ikili gösterimi nedeniyle, 0'ı 1'e ve 1'e 0'a çevirir), diğer sayılar için sıfırdan farklı sonuçlar verir. 0 yanlış bir değer olduğundan (!! 0 → yanlış), bu yüzden eğer koşul varsa o girmez.
İpucu : ES2015 kullanıyorsanız, şunları yapacak:
Bazı garip sebeplerden ötürü, kodda bir dizgeyi gizlemek, herhangi bir işlevi çağırmak istemiyorsanız, bunu doğal olarak yapabilirsiniz. Oner onaltılık veya unicode kaçış dizileri kullanın:
İnsan tarafından okunabilir iletileri dönüştürmesi gereken basit bir işlev oluşturalım:
İkili bir ifadede, ilk işlenen sonuç koşullarını karşıladığında ikinci işlenen değerlendirilmez. Bazı örneklere bir göz atalım:
Şimdi, güzel şey aynı işlevler için de geçerli.
Açıkçası, sihir add fonksiyonundadır. Hadi şunu genişletelim:
Evet, şey kötülüktür, ama belki de mad-fen projelerinde size yardımcı olabilecek bazı özellikleri vardır.
Eval'ı katı modda çalıştırırken, çevreleyen alanda değişkenler oluşturmanıza izin vermez. Değerlendir, yalnızca ilettiğiniz kodu yorumlar ve çalıştırır:
Şimdi, sıkı modu etkinleştirdiğimizde, yukarıdaki ikinci değerlendirme hala çalışmaya devam edecektir, ancak y değişkenini eval ortamının dışında oluşturmayacaktır:
Yeni Fonksiyon yapıcısını kullanarak dinamik fonksiyonları tanımlayabiliriz.
Bu kullanıldığında bir kullanım durumu, şablonu bir kez ayrıştıran ve şablon verilerini kabul eden bir işlevi döndüren şablon kütüphanelerinde (örneğin, ejs, ajs vb.) Bulunur.