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