Jak obejít zrádnou kontrolu typů v JavaScriptu
Nálepky:
Kdo programuje v JavaScriptu ví, že kontrola datových typů v něm může být zrádná. Napřiklad pro vytvořené pole platí instance of Array
, ale již to neplatí pro pole, které vám bylo předáno z jiného okna nebo rámce (čas od času na tuto „zradu“ vývojáři narazí). Univerzální způsob pro kontrolu typů v JavaScrptu neexistuje a vývojáří se proto snaží nalézat vlastní řešení. V článku instanceof
considered harmful (or how to write a robust isArray
) najdete možné řešení pro detekci pole.
Myslim, ze ti, co nepouzivaju framework, maju uz davno napisanu funkciu, ktora to grepuje z prototype.toString.
Mazariku, znám javascriptové vývojáře a ani trochu tomu nevěřím. (Pokud někteří z nich mají na zmíněný problém vlastní řešení, budiž jim chvála, ale jedná se o – téměř zanedbatelnou – hrstku.)
Nezdá se mi, že odkazovaný příklad je úplná výhra, neboť to spoléha na nestandardizovaný výstup [object Array], co když to někdo z výrobců změní?
Výstup ve formátu [object XXX] je standardizovaný ve 3. edici specifikace ECMA-262:
Hodnota vlastnosti [[Class]] zmíněné v 1. kroku je zapsána interpretem, nelze ji nijak změnit a konkrétně u pole bude vždy
"Array"
(viz 15.4.2.2).I kdyby tento formát ve specifikaci standardizován nebyl, nikdo z výrobců prohlížečů si ho kvůli kompatibilitě nedovolí porušit.
Troufnu si tvrdit, že technika detekce polí přes
Object.prototype.toString
je spolehlivá. Rozhodně spolehlivější, než všechny ostatní, které znám.