Ответ 1
Это позволяет вызвать функцию (используя call
или apply
) в строгом режиме на том, что не является массивом при выполнении спецификации.
Если это экземпляр Array
или объект, похожий на массив, он ничего не меняет.
Но здесь, поскольку эта строка, гарантирующая list
, является объектом, следует, что this
не является ни null
, либо undefined
, а поскольку другие значения не будут приводить к отказу следующих обращений (кроме особых случаев что Object(this)
не решит, например, сбойщики доступа), я не уверен, что на самом деле есть точка. Возможно, он был установлен перед проверкой, или, может быть, здесь, только в случае особых собственных объектов. Другая возможность заключается в том, что он (тоже?) Строго следует за спецификацией шаг за шагом и хочет применить toObject.
list.length >>> 0
лучше, чем || 0
в том, что он округляется до ближайшего более низкого положительного целого (в 32-битном диапазоне). Я не уверен, почему >>
здесь не использовался, так как кажется, что лучше повторять итерацию до 4294967295, а не до -1 (т.е. Не терять время).