Js bir nesnenin dizi türü olup olmadığına nasıl karar verir?

Önce typeof'u deneyin

alert (typeof 1); // "sayı" dizesini döndür

alert (typeof "1"); // "string" dizesini döndür

alert (typeof true); // "boolean" dizesini döndür

alert (typeof {}); // "nesne" dizesini döndür

alert (typeof); // "nesne" dizesini döndür

alert (typeof function () {}); // "function" dizesini döndürür

alert (typeof null); // "nesne" dizesini döndür

alert (typeof undefined); // "tanımsız" dizesini döndür

Bunların arasında, typeof {} ve typeof sonuçlarının her ikisi de nesnedir, bu nedenle soru, typeof'u bir nesnenin dizi türü olup olmadığını belirlemek için nasıl kullanabilirim?

Nesneler nesnelerdir, diziler nesnelerdir. Js'deki her şey bir nesnedir. Açıkçası, basit bir typeof operatörü hedefe ulaşamaz. Yöntemi değiştirmeliyiz.

Aşağıdaki yöntemleri deneyebilirsiniz:

1. Prototip ile başlayın (atayı tanıyın ve ataya geri dönün), Array.prototype.isPrototypeOf (obj);

Array'in obj prototip zincirinde olup olmadığını belirlemek için isPrototypeOf () yöntemini kullanın, öyleyse, true, aksi takdirde false döndürür.

Not: Her nesnenin, babanın (Array) child öğesinin (obj) ebeveyni olup olmadığını belirlemek için kullanılan, Object.prototype'dan miras alınan bir isPrototypeOf API'si vardır.

2. Yapıcıdan (annesi) da başlayabilirsiniz

(1) obj instanceof Array

Önce typeof ve instanceof arasındaki farktan bahsedeyim?

Her ikisi de değişkenleri belirlemek için kullanılabilir, typeof makalenin başlangıcı gibi temel türü döndürecektir, rahatlıkla kullanabiliriz

typeof a! = 'tanımsız' Bir değişkenin varlığını belirleyin. Ve instanceof yalnızca bir Boolean değeri döndürecektir, öyleyse deneyelim, sonuç aşağıdaki gibidir:

Not: Bu yöntemle ilgili bir sorun, doğrulamanın yeterince katı olmamasıdır. Nesne, oluşturulduğunda bir dizi ile oluşturulmamış olsa bile, prototip zincirinde bir dizi türü olduğu sürece, aşağıdaki kod parçasında olduğu gibi bir dizi olarak kabul edilir:

fonksiyon testi(){}

Test.prototype = Array.prototype;

let test = new Test ();

test instanceof Array; // true

(2) obj.constructor === Dizi

Yapıcının prototipi, prototip nesnesini işaret eder.Aynı zamanda, prototip nesnesi, yapıcı nesneye geri işaret eden bir kurucuya sahiptir ve yapıcı yalnızca prototip nesnesine sahiptir.

3. Nesnenin sınıf özniteliğine (sınıf özniteliği) göre, toString () yöntemi prototip zinciri boyunca çağrılır.

4. Array.isArray () yöntemi.

Aslında js, aşağıdaki gibi bir dizi türü olup olmadığını belirlemek için bir yöntem sağlamıştır:

Profesyoneller şok oldu: Notre Dame yangınının arkasında çok fazla hata ve boşluk var
önceki
Riverside 5.000 genci bir araya getiriyor
Sonraki
Pekin'deki insanlar "Foxiangge" ve "Li Bai" yi nasıl telaffuz ediyor?
Otomatik finans gizli 4S mağazasının kodunu çözme
Zeng Chunlei: Müdür Lang'tan bir kısa mesaj 3 yıl önce kalbimin düğümünü açtı
Paylaşım: Yeni web ön uç mühendislerine: Öğrenme yönteminiz doğru mu?
Tüm insanlık pişmanlıkları! 800 yaşındaki Notre Dame de Paris'te yangın çıktı! Sivri çöktü ve gül penceresi yıkıldı! Fransa Cumhurbaşkanı yeniden yapılanmayı duyurdu
"Mazu burada kardeşler, kapın!"
İş bulmak veya işe almak zor mu? Shenzhen üst düzey iş fuarlarının ortalama yıllık maaşı 200.000 yuan'dır!
"Efsane Deve Çanı" uluslararası ödülü kazandı
Baidu Brain ve Qualcomm AI DAY, AR yetenekleri hala böyle oynayabilir mi?
[Night Reading] Açık bir hayatı kim istemez
Shenzhen Benz sahipleri, açılır tavanın sebepsiz yere açıldığını iddia ediyor, 4S mağazası: özel özellikler
Buick yeni bir ürün döngüsüne giriyor ve önümüzdeki beş yıl içinde 20'den fazla modeli piyasaya sürecek
To Top