JavaScript типове, класове и рамки, GO блог
Помислете за още един аспект: рамки. Данните могат да се предават от рамка на рамка.
Например, имаме функция, която третира масив малко по-различно от обект:
И страницата има вградена рамка, която съдържа следното:
window.parent.func([1, 2, 3]);
Това няма да работи правилно. Тъй като сравняваме стойността с нашия масив от нашия главен прозорец. И стойността е създадена в рамката, в която има собствен прозорец и собствен прозорец.Масив, и този масив се произвежда от него.
Нека сега се опитаме да определим вида и "класа" на стойността, като вземем предвид факта, че тя може да не идва от нашия прозорец.
Как да определите, че стойността идва от рамката
Всички нескаларни стойности са наследени от Object, така че можете да ги проверите по следния начин:
стойност екземпляр на обект; // стойността е наследена от Object на нашия прозорец, така че е и от него.
сравнение на типове и стойности
typeof работи както обикновено за "не нашите" стойности:
typeof null все още е "обект", но е по-добре дефиниран чрез сравнение:
функция isNull(стойност) < върната стойност === null; >функция еНедефинирана(стойност)
В обозримо бъдеще се надяваме най-накрая да можем да дефинираме функция с помощта на typeof, но засега има нюанси:
typeof alert === "обект"; // Хост функции в IE array, regexp, Error, Date and String, Number и Boolean, създадени чрез конструктори ( new Number(1)):
За масив можете също да запомните, че вече имаме ES5 почти навсякъде:
DOM за нормални браузъри
За нормалните браузъри трябва само да дефинираме HTMLCollection и DOM елементите.
Всички DOM елементи имат низово представяне във формата „[обектен HTML елемент]“:
елемент instanceof window.HTMLElement;
Във Firefox е такавинаги се задейства за DOM елементи, независимо от коя рамка е този елемент или HTMLElement. Докато елемент instanceof Object работи само за един кадър.
В други браузъри това работи само за неговата рамка, но в IE изобщо няма HTMLElement (но в IE8 има Element).