Ответ 1
Да, замораживание должно работать для массивов, поведение, которое вы испытываете, явно является ошибкой реализации.
Эта ошибка может быть связана с тем, что объекты массива реализуют собственный [[DefineOwnProperty]]
внутренний метод (магия, которая заставляет свойство length
работать).
Я только что протестировал его на двух реализациях, и он работает правильно (Chrome 16.0.888 и Firefox Aurora 8.02a).
О вашем втором вопросе, ну, объекты массива, наследуемые от Array.prototype
, которые наследуются от Object.prototype
, например, вы можете получить доступ к темным методам из Object.prototype
непосредственно к объектам массива:
['a'].hasOwnProperty('0'); // true
Но это не связано с тем, как работает typeof
, этот оператор вернет 'object'
для любого объекта intance, независимо от его вида, и для значения null
, о котором люди всегда жаловались.
Остальные возможные возвращаемые значения оператора typeof
соответствуют примитивным типам языка: Number, String, Boolean, Symbol и Undefined.