在 MDN 中一些数组原型(prototype)函数的 polyfill 示例中,有以下两行(例如:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find):
var list = Object(this);
var length = list.length >>> 0;
我假设第一个例子是自动装箱(?)。但是,如果 this
始终是一个数组,那么它的目的是什么?
第 2 行,这与以下内容有何不同:
var length = list.length || 0;
谢谢!
最佳答案
这使得在遵循规范的同时在非数组的对象上以严格模式调用函数(使用 call
或 apply
)成为可能。
如果它是 Array
的一个实例,或者一个类似数组的对象,它不会改变任何东西。
但在这里,确保 list
是一个对象的这一行会检查 this
既不是 null
也不是 undefined
,并且由于其他值不会使以下访问失败(除了 Object(this)
无法解决的非常特殊的情况,例如失败的访问器),我不确定是否真的有观点。也许它是在检查之前设置的,或者它可能只是为了防止特殊的 native 对象而在这里。另一种可能性是它(也?)严格遵循 specification一步步想申请toObject .
list.length >>> 0
优于 || 0
事实上它四舍五入到最接近的较低的正整数(在 32 位范围内)。我不确定为什么这里没有使用 >>>
,因为迭代到 4294967295 似乎并不比迭代到 -1 更好(即不要浪费时间)。
关于javascript - Object([]); 是做什么的?做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455529/