函数内的空括号是什么意思?

时间:2013-11-02 22:11:18

标签: javascript

我遇到了以下代码,我很好奇[]的含义:

function checkForImage(mutation) {
        if (mutation.addedNodes && (mutation.addedNodes.length > 0)) {
            [].slice.call(mutation.addedNodes).forEach(function(node) { ...

1 个答案:

答案 0 :(得分:5)

目的只是获取一个数组([]是一个数组),以便能够获得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) {

除非某些隐藏代码证明使用了真实数组。