Пример в статье был приведен для случая с IE.
С другой стороны, в него закралась ошибка: пример справедлив для всех случаев, когда объект создается через Object.create().
Исправил.
В то время как обычное равенство при наличии null в сравнении всегда возвращает false.
Согласен, это был странный пассаж, ведь речь шла о числах. Спасибо, исправил.
Относительно проверки собственный свойств.
По идее, метод getOwnPropertyNames должен быть действительно быстрее: он не обходит свойства прототипов.
К тому же, метод доступен IE9+
Но если продолжать тему "пальбы по ногами", следует упомянуть, что свойства объектов могут обладать разными параметрами дескрипторов.
Так, например, некоторые свойства могут быть неитерируемыми enumerable = false.
Как можно заметить, метод Object.getOwnPropertyNames() выводит все ключи без разбора. Вероятно, целесообразней использовать Object.keys(), но это зависит от требований к программе.
Ко всему прочему, мне показалось, что из обсуждения выпал случай, когда мы проверяем собственное свойство объекта вне циклов — выборочно.
Относительно строгости сравнения, не готов сейчас ступать на "тонкий лед": на вскидку, мне тяжело сейчас вспомнить случай, когда последний раз нестрогое сравнение ломало программу.
Но случай когда вовремя неприведенные к нужному типу данные — вчера.
// образный пример
var uid = this.getAttribute("data-uid");
stash[uid + 1] = true; // вместо 1 я получил "01"
// можно легко забыть сделать stash[+uid + 1]
Пример в статье был приведен для случая с IE.
С другой стороны, в него закралась ошибка: пример справедлив для всех случаев, когда объект создается через
Object.create()
.Исправил.
Спасибо за развернутые замечания.
Согласен, это был странный пассаж, ведь речь шла о числах. Спасибо, исправил.
Относительно проверки собственный свойств.
По идее, метод
getOwnPropertyNames
должен быть действительно быстрее: он не обходит свойства прототипов.К тому же, метод доступен IE9+
Но если продолжать тему "пальбы по ногами", следует упомянуть, что свойства объектов могут обладать разными параметрами дескрипторов.
Так, например, некоторые свойства могут быть неитерируемыми
enumerable = false
.Как можно заметить, метод Object.getOwnPropertyNames() выводит все ключи без разбора. Вероятно, целесообразней использовать
Object.keys()
, но это зависит от требований к программе.Ко всему прочему, мне показалось, что из обсуждения выпал случай, когда мы проверяем собственное свойство объекта вне циклов — выборочно.
Относительно строгости сравнения, не готов сейчас ступать на "тонкий лед": на вскидку, мне тяжело сейчас вспомнить случай, когда последний раз нестрогое сравнение ломало программу.
Но случай когда вовремя неприведенные к нужному типу данные — вчера.
Спасибо за развернутый комментарий.
Экземпляры массива созданные внутри фреймов и других окон будут иметь разные экземпляры конструкторов
Кстати говоря, MDN предлагает в качестве полифила toString решение
Наследование может быть, но не от Object.
Поправьте, если ошибся.