anlam
Genişleme operatörü (spread) üç noktadır (...) )。 Bu, bir dinlenme parametresinin tersi gibi, bir diziyi virgülle ayrılmış bir parametre dizisine dönüştürmek gibi.
Bu operatör esas olarak fonksiyon çağrıları için kullanılır.
Yukarıdaki kodda, array.push(...) items) ve add(...) numbers), her ikisi de fonksiyon çağrısıdır ve her ikisi de uzantı operatörleri kullanır. Bu operatör, bir diziyi parametreler dizisine dönüştürür. Uzatma operatörleri, normal fonksiyon parametreleriyle birlikte kullanılabilir ve bu oldukça esnektir.
Alternatif diziler için uygulama yöntemi
Uzantı operatörü diziyi genişletebildiğinden, diziyi fonksiyona argümana dönüştürmek için apply yöntemini kullanmaya gerek yoktur.
İşte uygulama yönteminin yerine bir uzantı operatörünün uygulanmasına dair pratik bir örnek, Math.max yöntemi bir dizinin en büyük elemanının yazılmasını basitleştirmek için uygulanıyor.
Yukarıdaki kod, JavaScript'in bir dizinin en büyük elemanını bulacak bir fonksiyon sağlamadığı için, sadece Math.max fonksiyonu uygulayarak diziyi bir parametre dizisine dönüştürüp maksimum değeri bulabileceğinizi söylüyor. Uzantı operatörü ile Math.max doğrudan kullanabilirsiniz. Bir diğer örnek, push fonksiyonu aracılığıyla başka bir dizinin kuyruğuna bir dizi eklemektir.
Yukarıdaki kodun ES5 yazma yönteminde, push yönteminin parametreleri dizi olamaz, bu yüzden push yöntemini uygulama yöntemi aracılığıyla esnek bir şekilde kullanmamız gerekir. Uzatma operatörü ile, dizi doğrudan push yöntemine aktarılabilir. İşte başka bir örnek.
Operatörlerin uygulanmasını genişletmek
(1) Dizileri birleştirme
Uzatma operatörü, sayıların kombinasyonunu yazmak için yeni bir yol sunar.
(2) dekonstrüksiyon ile birleştirilmiş
Uzatma operatörleri, diziler oluşturmak için dekonstrüksiyon atamalarıyla birleştirilebilir.
Dizi ataması için uzantı operatörünü kullanırsanız, sadece parametrenin son rakamına yerleştirilebilir, aksi takdirde hata bildirilir.
(3) Fonksiyonun getiri değeri
JavaScript fonksiyonları yalnızca bir değer döndürebilir ve birden fazla değer döndürülmesi gerekirse sadece dizileri veya nesneleri döndürebilir. Uzatma operatörleri bu sorunu çözmek için bir çözüm sunar.
Yukarıdaki kod, veritabanından bir veri satırı alır, operatörü genişletir ve doğrudan üretici Date'e iletir.
(4) Yayım
Uzatma operatörleri ayrıca dizeleri gerçek dizilere dönüştürebilir.
Yukarıdaki yazının önemli bir avantajı vardır; yani 32-bit Unicode karakterleri doğru şekilde tanıyabilmektedir.
Yukarıdaki kodu yazmanın ilk yolu olan JavaScript, 32-bit Unicode karakterlerini 2 karakter olarak tanır ve uzantı operatörlerinde bir sorun yoktur. Yani dizinin uzunluğunu doğru şekilde döndüren fonksiyon şöyle yazılabilir:
Bu, 32-bit Unicode karakterlerin manipüle edilmesini içeren herhangi bir fonksiyon için sorundur. Bu nedenle, hepsini genişletme operatörleriyle yeniden yazmak en iyisidir.
Yukarıdaki kodda, uzatma operatörünü kullanmazsanız, string ters işlemi yanlıştır.
(5) Iterator arayüzünü uygulayan nesneler
Iterator arayüzündeki herhangi bir nesne, uzantı operatörüyle gerçek bir diziye dönüştürülebilir.
Yukarıdaki kodda, querySelectorAll yöntemi bir nodeList nesnesi döndürür. Bu bir dizi değil, dizi benzeri bir nesnedir. Bu durumda, uzantı operatörü bunu gerçek bir diziye dönüştürebilir çünkü NodeList nesnesi Iterator arayüzünü uygular. Iterator arayüzü olmayan dizi benzeri nesneler için, uzantı operatörü onları gerçek bir diziye dönüştüremez.
Yukarıdaki kodda, arrayLike dizi benzeri bir nesnedir, ancak Iterator arayüzü dağıtılmadan, uzantı operatörü hata rapor eder. Bu durumda, arrayLike'ı gerçek bir diziye dönüştürmek için Array.from yöntemini kullanabilirsiniz.
(6) Harita ve Küme yapıları, Üreteç fonksiyonları
Uzantı operatörü, veri yapısının Iterator arayüzünü dahili olarak çağırır, böylece Iterator arayüzüne sahip herhangi bir nesne, örneğin Map yapısı gibi bir uzantı operatörü kullanabilir.
Jeneratör fonksiyonu çalıştığında, bir traverser nesnesi döner, böylece uzatma operatörleri de kullanılabilir.
Yukarıdaki kodda, Go değişkeni bir Üretici fonksiyonudur ve çalıştırmadan sonra bir traverser nesnesi döndürür; bu traversal nesnede bir uzatma operatörü çalıştırıldığında, iç dolaşmadan elde edilen değerler bir diziye dönüştürülür. Bir nesne için bir uzatma operatörü kullanırsanız, bir hata bildirilir.
|