1. Сначала представьте 5 оригинальных типов
5 примитивных типов в JavaScript - это строка , число , логическое , неопределенное , ноль
var name = "jack"; var age = 32; var single = false; var app; //undefinedconsole.log(typeof name); //StringConsole.log(TypeOf возраст); //numberConsole.log(TypeOf сингл); //booleanconsole.log(typeof app); //undefinedconsole.log(typeof null); //объект
Было обнаружено, что остальные четыре основных типа , кроме NULL, могут быть идентифицированы TypeOF :
if (typeof name === "string") {name += "Zhang"; } if (typeof age === "number") {age ++; } if (typeOf single === "boolean" && single) {…} if (typeof app === "undefined") {app = {}; }Поскольку Typeof Null получит объект, используйте ===, чтобы обнаружить нулевое напрямую:
if (el === null) {…}2. объект
Объекты JavaScript включают встроенные объекты ( дата, Regexp, ошибка и т. Д.) и пользовательские объекты .
(Обратите внимание, что, хотя функция и массив также являются встроенными объектами, они обсуждаются отдельно в следующем разделе)
Объекты не могут быть обнаружены с использованием типов , подобных основным типам, потому что обнаруженные результаты - все объект :
console.log (typeof new Date ()); //objectConsole.log(TypeOf new Regexp ()); //objectConsole.log(TypeOf new Error ()); //objectConsole.log(TypeOf new Person ()); //objectConsole.log(TypeOf new Person ()); // Использование TypeOF для обнаружения, что пользовательский объект также является объектом
Вместо этого использовать экземпляр для обнаружения:
var date = new date (); var reg = new Regexp (); var err = new error (); var me = new Person (); if (date ancessionof date) {// Дата обнаружения Год = date.getifleear (); } if (reg instanceof regexp) {// обнаружение регулярного выражения reg.test (...); } if (err EncementOf error) {// Обнаружение исключений Throw Err; } if (me ancementof person) {// обнаружение пользовательского объекта ...} Но есть проблема с пользовательскими объектами, предполагая, что этот человек определяется как в Framea, так и в рамках браузера. Объект ME определяется в Framea, и он обнаруживается как истинный, используя me instanceof Person . Но когда пользовательский объект меня передается в Frameb, экземпляр будет ложным в Frameb.
Как упоминалось в начале этого раздела, хотя функция и массив также являются встроенными объектами, они оставлены в следующем разделе. Причина в том, что функция и массив также имеют те же самые выше задачи, что и пользовательские объекты. Следовательно, функция и массив, как правило, не используют экземпляр
3. Функция
Выше сказано, что использование функции обнаружения экземпляра не может пересечь рамки. Поэтому тип используется для обнаружения, что может быть перекрестно:
var func = function () {}; if (typeof func === 'function') {…}Тем не менее, IE8 использовал TypeOF для обнаружения функций DOM и получает объект, поэтому IE8 используется в:
console.log (typeof document.getelementbyid); // объект, а не functionconsole.log (typeof document.getelementsbytagname); // объект, а не functionconsole.log (typeof document.createElement); // объект, а не функция // IE Browsers перед IE8, используйте, чтобы определить, поддерживается ли функция DOM if ("getElementById" в документе) {…} if ("getElementsBytagName" в документе) {…} if ("getElementsbytagname" в документе) {…} if («Создание» в документе) {4. Массив
Выше сказано, что использование экземпляра для обнаружения этого массива не может пересечь рамки. Перед ES5 у нас есть индивидуальные методы обнаружения. Наиболее точный метод: ToString, который зависит от массива, вернет фиксированную строку «[MARSE ARRAY]» для обнаружения :
Функция isarray (arr) {return object.prototype.tostring.call (arr) === "[object array]";}Этот метод точный и элегантный, поэтому он был принят многими библиотеками. Наконец, массив был введен в качестве метода isarray в ES5, ссылаясь на MDN. Теперь вам не нужно настраивать метод обнаружения, просто используйте isarray () .
Другие методы обнаружения имеют свои собственные дефекты и не могут быть на 100% точными. Но как способ мышления, это можно извлечь из этого. Например, полагаясь на тот факт, что массив является единственным объектом, содержащим метод сортировки:
Функция isarray (arr) {return typeof arr.sort === "function";}Если метод сортировки также определен для пользовательского объекта, метод будет недействительным.
V. Атрибуты
Обнаруйте, следует ли использовать свойство в объекте экземпляра. Если вам все равно, находится ли атрибут в объекте экземпляра или в объекте прототипа, вы можете просто использовать в
Например, обнаружение буквальных свойств объекта:
var person = {name: "jack", возраст: 33}; if ("имя" лично) {…} //trueif(person.hasownproperty("name ")) {…} // trueНапример, свойства объекта экземпляра:
var person = function (имя, возраст) {this.name = name; this.age = age;}; person.prototype.location = "shanghai"; var me = новый человек ("jack", 33) if ("name" in me) {…} //trueif(me.hasownproperty("name ")) {…} // trueif (location" in me) {} //trueiftiftocom { … }//ЛОЖЬДругие методы не хороши:
if (Object [propname]) // Не хорошо, как вы узнаете, что значение свойства не 0 или 1? if (Object [propname] === null) // Не хорошо, как вы узнаете, что значение свойства не является нулевым? if (Object [propname] === не определено) // Не хорошо, как вы узнаете, что значение свойства не является не определенным?
Суммировать
Используйте TypeOF, чтобы обнаружить строку, число, логическое, неопределенное, функция
Обнаружение NULL с ===
Обнаружение массива с помощью isarray ()
Используйте экземпляр для обнаружения встроенных объектов (кроме функции и массива) и пользовательских объектов
Используйте HasownProperty, чтобы обнаружить, находится ли свойство в объекте экземпляра. Если вам все равно, находится ли атрибут в объекте экземпляра или в объекте прототипа, вы можете просто использовать в
Хорошо, это все для этой статьи о том, как обнаружить различные типы JavaScript. Я надеюсь, что каждый сможет тщательно изучить содержание этой статьи, что может быть полезно для всех, чтобы изучить JavaScript.