Як в js дізнатися що об'єкт

Дізнався на семінарі Кантора таку штуку. Як дізнатися, що об'єкт, який прийшов на вхід - масив? Звичайно, краще використовувати качину типізацію, але якщо нам потрібен саме масив, з усією повнотою методів, не перевіряти ж кожен?

До речі, якщо хтось думає, що відповідь «typeof», то він просто не знає JS. Ця конструкція поверне «object».

Я до недавнього часу думав, що правильний спосіб такий: А рідко його використовують, тому що конструкція «instanceof» не скрізь реалізована. Я помилявся. Ось правильний спосіб: І ось чому. Виявляється. у кожного фрейма своя ієрархія типів, якщо один фрейм передає в другій якийсь об'єкт, то «instanceof» дасть «false», так як порівнює c «Array», локальним для цього фрейму. Проблему ілюструє наступний приклад:

if (Boolean.valueOf (stringValue) .length () == 4) // stringValue is "true" :)
>

Тільки «Boolean.valueOf.call (stringValue) .length», напевно :) І на «null» воно теж «4» поверне. І на «1234» - теж.

Виявляється, у кожного фрейма своя ієрархія типів
Знатна підлість. Між контекстами JS можна безпечно передавати тільки у що-небудь серіалізовані об'єкти, і пересоздавать їх на приймаючій стороні заново.
Я на ній одного разу, давним-давно, ще за часів IE 5.5, втратив купу часу. Додаток у мене було многофреймовое, JSON'а тоді ще не було, і довелося здорово поізвращаться.

А я не говорив, що це коректний код. Це шматок якогось індуського програмування. Нагадало не в сенсі також круто, просто асоціація :)

Схожі статті