Когда, например:
var obj = {
0: 'first',
length: '1'
};
alert(obj.length === +obj.length);
Подчеркивание-х each
является общим, поэтому может работать с другими другими, чем array
объектов. Аналогично ECMA5 forEach
Функция forEach намеренно является общей; он не требует, чтобы это значение было объектом Array. Поэтому он может быть передан другим типам объектов для использования в качестве метода. Может ли функция forEach успешно применяться к объекту хоста, зависит от реализации.
Таким образом, подчеркивание проверяет действительность объекта length
. И они считают объект arrayLike
, для этого метода итерации, только если объект length
возвращает number
, который не является NaN
, и, безусловно, не является string
. Таким образом, в моем примере выше obj
провалится на свою итерацию keys
, если нет нативного/полифорированного forEach
.
гарантирует, что длина содержит фактическое число, а не строку, представляющую число .. (* потому что он использует '===', который также проверяет тип *). Таким образом, он увеличивает защиту от передачи ему случайного объекта, который имеет свойство 'length'. –