1. Метод оценки реального массива
Самый простой способ объявить массив в JavaScript:
var a = [];
Наиболее прямой способ определить, является ли это массивом:
Кода -копия выглядит следующим образом:
экземпляр массива // true
A.Constructor == Array // True
Здесь приходит экземпляр синтаксиса. экземпляр - облачный оператор. Как "+-*/", его синтаксис выглядит следующим образом:
Результат = obj Intancef Class
Он используется для определения того, является ли объект экземпляром класса, и результат операции возвращает TRUE или FALSE. Определение класса в JavaScript инициализируется через конструктор, поэтому правильный оператор синтаксиса экземпляра должен быть экземпляром функции, то есть функция класса должна быть истинной, и если правильный оператор не является функцией при использовании экземпляра, исключение TypeRorr будет выбрано. Все объекты являются экземплярами объекта, поэтому любой экземпляр объекта возвращает истинность. Хотя мы говорим, что объекты инициализируются с помощью конструкторов, экземпляр не проверяет, строится ли объект функцией, но унаследован прототипом конструктора. Следующий пример может проиллюстрировать эту проблему:
Кода -копия выглядит следующим образом:
Диапазон функций (низкий, высокий) {
this.low = low;
это. High = High;
}
Range.prototype.constructor == Range; //истинный
Range.prototype = {
Включите: function (x) {return (x> = this.low && x <= this.high); },
exkdude: function (x) {return (x <this.low && x> this.high); }
}
var r = новый диапазон (0, 100);
r экземпляр диапазона; //ЛОЖЬ
r экземпляр объекта; //истинный
Range.prototype.constructor == Object; //истинный
Хотя R построен через новый диапазон, R не является экземпляром диапазона. Это проблема. Оператор назначения диапазона. Перед назначением прототипа диапазон. Это легко понять, потому что
Кода -копия выглядит следующим образом:
Range.prototype = {
Включите: function (x) {return (x> = this.low && x <= this.high); },
exkdude: function (x) {return (x <this.low && x> this.high); }
}
На самом деле эквивалентно:
Кода -копия выглядит следующим образом:
Range.prototype = новый объект ({
Включите: function (x) {return (x> = this.low && x <= this.high); },
exkdude: function (x) {return (x <this.low && x> this.high); }
});
Таким образом, range.prototype.constructor == объект, тогда экземпляр, созданный через новый диапазон, конечно, экземпляр объекта.
Более прямой увидеть официальное объяснение:
Экземпляр оператора на самом деле не проверяет, был ли R инициализирован конструктором диапазона. Он проверяет, наследует ли он от Range.prototype.
Существует также тип функции в JavaScript, которая имеет аналогичные функции как экземпляр, но она возвращает конкретные основные типы данных: число, строка, функция, объект, неопределенные, логические. Есть только шесть типов, и те, кто не в пределах этих шести типов, возвращает объект, то есть тип ([]) возвращает объект, а не массив.
Другим синтаксисом является конструктор, конструктор возвращает конструктор объекта:
Кода -копия выглядит следующим образом:
var a = [];
A.Constructor; //Множество
Конструктор является функцией инициализации объекта, которая использует новые вызовы. Если объект является массивом, то его конструктор должен быть массивом, а класс, который вы написали, не обязательно верно, потому что конструктор в прототипе может быть изменен.
2. Метод оценки псевдо-арайла
В JavaScript есть псевдо-арай. Его можно пройти, используя метод обхода, похожий на массив. Он имеет атрибут длины, чтобы получить длину элемента. Вы можете использовать подписк [] для получения указанного элемента. Мы называем этот вид псевдо-арайей. Объект в jQuery-это типичный псевдо-арай, как показано на рисунке ниже:
Следовательно, ключом к оценке того, является ли это псевдо-арайем, состоит в том, чтобы судить о том, есть ли атрибут длины и есть ли сплайс операции базовой операции. Ниже приведен метод суждения:
Кода -копия выглядит следующим образом:
var is_array = function (value) {
возвращаемое значение &&
typeof value === 'Object' &&
typeof value.length === 'номер' &&
typeof value.splice === 'function' &&
! (value.propertyIsenumerable ('длина'));
};
Здесь PropertySeNumerable используется для определения того, перечисляется ли свойство длины. Фактически, нативный строковый объект также имеет эффект массива, но мы не можем рассматривать его как объект массива, поэтому нам нужно судить о значении TypeOF == «Объект», потому что TypeOf строковый объект возвращает строку.