Сборка от 17 марта 2017 г



Download 9,9 Mb.
bet195/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   191   192   193   194   195   196   197   198   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Метод Array.isArray()


Для проверки типа на массив есть специальный метод: Array.isArray(arr) . Он возвращает true только если arr – массив:


alert( Array.isArray([1,2,3]) ); // true alert( Array.isArray("not array")); // false


Но этот метод – единственный в своём роде.


Других аналогичных, типа Object.isObject , Date.isDate – нет.




Оператор instanceof


Оператор instanceof позволяет проверить, создан ли объект данной функцией, причём работает для любых функций – как встроенных, так и наших.


function User() {} var user = new User();


alert( user instanceof User ); // true

Таким образом, instanceof , в отличие от [[Class]] и typeof может помочь выяснить тип для новых объектов, созданных нашими конструкторами.


Заметим, что оператор instanceof – сложнее, чем кажется. Он учитывает наследование, которое мы пока не проходили, но скоро изучим, и затем вернёмся к instanceof в главе Проверка класса: "instanceof".




Утиная типизация


Альтернативный подход к типу – «утиная типизация», которая основана на одной известной пословице: «If it looks like a duck, swims like a duck and quacks like a duck, then it probably is a duck (who cares what it really is)».


В переводе: «Если это выглядит как утка, плавает как утка и крякает как утка, то, вероятно, это утка (какая разница, что это на самом деле)». Смысл утиной типизации – в проверке необходимых методов и свойств.
Например, мы можем проверить, что объект – массив, не вызывая Array.isArray , а просто уточнив наличие важного для нас метода, например
splice :

var something = [1, 2, 3];


if (something.splice) {


alert( 'Это утка! То есть, массив!' );
}

Обратите внимание – в if мы не вызываем метод something.splice() , а пробуем получить само свойство something.splice . Для массивов оно всегда есть и является функцией, т.е. даст в логическом контексте true .


Проверить на дату можно, определив наличие метода getTime :

var x = new Date();


if (x.getTime) { alert( 'Дата!' );


alert( x.getTime() ); // работаем с датой
}

С виду такая проверка хрупка, ее можно «сломать», передав похожий объект с тем же методом.


Но как раз в этом и есть смысл утиной типизации: если объект похож на дату, у него есть методы даты, то будем работать с ним как с датой (какая разница, что это на самом деле).


То есть, мы намеренно позволяем передать в код нечто менее конкретное, чем определённый тип, чтобы сделать его более универсальным.




Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   191   192   193   194   195   196   197   198   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish