JavaScript'te Bilmediğiniz 7 Şey

JavaScript'te Bilmediğiniz 7 Şey


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.

 

 

1. İki Sıfır Var

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:

  • 0/0 (0'a bölün)
  • + 'foo' (sayı olmayan bir sayıyı sayıya dönüştürür)
  • Sonsuzluk - Sonsuzluk
  • …ve daha fazlası.

Gerçek şu ki, bu özel bir sayıdır.

NaN kendisine eşit değildir.

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 (in) sonlu değildir.

NaN sonlu bir sayı değildir. Yani yok değil sonsuz olduğu anlamına gelir. Bu sadece sonlu veya sonsuz değil.

NaN pozitif veya negatif değildir.

NaN NaN'dir. + NaN veya -NaN yoktur. Her ikisi de NaN'dir:

3. Bitsel Operatörlerin Kullanımı

Bu oldukça anormal bir durumdur, ancak bitsel operatörler JavaScript’te desteklendiğinden, bunları kullanarak bazı güzel şeyler göstereceğim.

Hızlı çarpma / tamsayıların bölünmesi

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.

Şifreli mesajlar gönder

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:

Bir öğenin bir dizinin parçası olup olmadığını bulun

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:

4. Hex / Unicode Kodunu Kullanarak Dizeleri Temsil

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:

5. Kısa Devreli İkili Mantıksal Operatörler

İ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:

6. Strict Modunda Eval Çalışması Kötü Değil

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:

7. Dinamik olarak Fonksiyonlar Yaratın

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.

 YUKARI