在MDN中一些用于某些数组原型功能的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)
无法解决的非常特殊的情况,如失败的访问器),我不是确实有一点。也许是在检查之前设置的,或者只是在特殊的本机对象的情况下才在此处设置。另一种可能性是,它(太?)严格按照规范进行操作,并希望将其应用于Object。
list.length >>> 0
比|| 0
四舍五入到最接近的低位正整数(32位范围内)要好。我不确定为什么>>
不在这里使用它,因为迭代直到4294967295而不是-1(即不浪费时间)似乎并不更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句