Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是有效的[].forEach.call函数参数?_Javascript_Html - Fatal编程技术网

Javascript 什么是有效的[].forEach.call函数参数?

Javascript 什么是有效的[].forEach.call函数参数?,javascript,html,Javascript,Html,什么是有效的[].forEach.call函数参数?在下面的代码中,el似乎是一个节点列表或节点列表的一个元素 [].forEach.call( document.getElementById('menu').querySelectorAll('.custom-can-transform'), function(el){ el.classList.toggle('pure-menu-horizontal'); } ); ) 许多

什么是有效的
[].forEach.call
函数参数?在下面的代码中,
el
似乎是一个
节点列表
或节点列表的一个元素

[].forEach.call(
    document.getElementById('menu').querySelectorAll('.custom-can-transform'),
       function(el){
           el.classList.toggle('pure-menu-horizontal');
       }
    );
)

许多数组方法在设计上是通用的。这意味着它们的内部实现不依赖于
这个
成为
数组
实例。基本上,这种实现只需要该对象具有数字索引和
length
属性。这种对象称为“类似阵列的对象”

有许多对象符合此要求。例如,您观察到的节点列表为
document.getElementById('menu')。querySelectorAll
。这是一个类似数组的对象,因为您可以通过索引访问各个节点,并且这样的节点列表具有
length
属性

任何字符串也是类似数组的对象。例如,字符串“hello world”。您可以通过
str[t]
访问字符“w”。并且
str.length
等于11

数值索引和
length
属性的要求允许方法实现遍历集合的所有单个元素,而不需要知道该集合实际上是什么

它还可以在不同的对象上使用通用方法:

const obj={0:'1',1:'2',长度:2};
Array.prototype.forEach.call(obj,(el,index)=>{
log(`${index}:${el}`)
})
用函数的第一个参数替换函数的
这个
变量,然后用所有剩余参数调用函数,这些参数都赋给
.call()

这意味着上述代码的计算结果如下:

document.getElementById('menu').querySelectorAll('.custom-can-transform').forEach(function(el){
  el.classList.toggle('pure-menu-horizontal');
});
请注意,不使用
.call()
方法的
forEach
这个
变量将是
[]
,因为它是
forEach
调用的前缀

关于数组上的
forEach
的参数是什么


它只接受2个参数。第一个参数是为数组的每个元素调用的函数
callback
。第二个(可选)参数用于将
变量注入回调方法的函数体

你想在这里实现什么?你知道NodeList有一个forEach方法,对吗“forEach函数故意是泛型的;它不要求其此值是数组对象。因此,它可以被转移到其他类型的对象中用作方法。forEach函数是否可以成功应用于主机对象取决于实现。”@evolutionxbox-仅限于更有限的浏览器support@Quentin哦,是吗?我不知道