我遇到以下代码,我很好奇这[]
意味着什么:
function checkForImage(mutation) {
if (mutation.addedNodes && (mutation.addedNodes.length > 0)) {
[].slice.call(mutation.addedNodes).forEach(function(node) { ...
目的只是为了获得一个数组([]
是一个数组)才能获得该slice
功能。
这是必需的,因为mutation.addedNodes
它可能是“类似数组的”:数组函数可以工作,但不是的实例Array
。在这里,此构造带有slice
一个数组(以便该forEach
函数可用)。例如,此结构在活动节点列表中很常见。您可以在此页面上的控制台中对其进行测试:
document.getElementsByTagName('img').constructor // -> NodeList
document.getElementsByTagName('img').forEach // -> undefined
[].slice.call(document.getElementsByTagName('img')).constructor // -> Array
[].slice.call(document.getElementsByTagName('img')).forEach // -> a function
也可能是
Array.prototype.slice.call(mutation.addedNodes).forEach(function(node) {
这样可以避免创建无用的实例(其成本可能低得可笑),但会更加冗长。
但是更简单,更清洁的解决方案本来是
[].forEach.call(mutation.addedNodes, function(node) {
除非某些隐藏代码证明使用实数组是合理的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句