Javascript ES6“;“不是一个函数”;错误
我一直在编写一些使用ES6的JavaScript教程。到目前为止,其中两个课程已经抛出了相同的错误,作为JavaScript新手,我仍在尝试理解逻辑,因此不太擅长调试。我曾尝试使用Babel将ES6代码转换为纯JavaScript,认为这是浏览器问题,但也出现了同样的错误 任何帮助都将不胜感激 ES6 JavaScriptJavascript ES6“;“不是一个函数”;错误,javascript,function,dom,Javascript,Function,Dom,我一直在编写一些使用ES6的JavaScript教程。到目前为止,其中两个课程已经抛出了相同的错误,作为JavaScript新手,我仍在尝试理解逻辑,因此不太擅长调试。我曾尝试使用Babel将ES6代码转换为纯JavaScript,认为这是浏览器问题,但也出现了同样的错误 任何帮助都将不胜感激 ES6 JavaScript const inputs = document.querySelectorAll('.controls input'); function handleUpdate() {
const inputs = document.querySelectorAll('.controls input');
function handleUpdate() {
const suffix = this.dataset.sizing || '';
document.documentElement.style.setProperty(`--${this.name}`, this.value + suffix);
}
inputs.forEach(input => input.addEventListener('change', handleUpdate));
inputs.forEach(input => input.addEventListener('mousemove', handleUpdate));
由“巴别塔”编译的JavaScript
var inputs = document.querySelectorAll('.controls input');
function handleUpdate() {
var suffix = this.dataset.sizing || '';
document.documentElement.style.setProperty('--' + this.name, this.value + suffix);
}
inputs.forEach(function (input) {
return input.addEventListener('change', handleUpdate);
});
inputs.forEach(function (input) {
return input.addEventListener('mousemove', handleUpdate);
});
错误
inputs.forEach is not a function
使用Array.from()
将返回的NodeList
转换为Array
。然后,您可以在javascript
的其余部分使用链接到input
的.forEach()
const inputs = Array.from(document.querySelectorAll('.controls input'));
使用Array.from()
将返回的NodeList
转换为Array
。然后,您可以在javascript
的其余部分使用链接到input
的.forEach()
const inputs = Array.from(document.querySelectorAll('.controls input'));
首先,需要仔细检查两件事:
您是否在DOM完成解析之前运行此函数?如果是,请将此代码包装到DOMContentLoaded事件侦听器中,如下所示:
document.addEventListener('DOMContentLoaded', function() {
//code here
});
您的浏览器环境是否支持DOM节点列表上的forEach方法。要检查,console.log(NodeList.prototype.forEach)代码>您应该得到如下内容:函数forEach(){[native code]}
如果不支持,则不支持它,因此会出现错误
要消除对NodeList.forEach的不支持,您可以尝试以下方法:
var inputs = [].slice.call(document.querySelectorAll('.controls input'));
这将输出一个元素数组而不是节点列表,并允许您访问该数组。原型函数首先,需要仔细检查两件事:
您是否在DOM完成解析之前运行此函数?如果是,请将此代码包装到DOMContentLoaded事件侦听器中,如下所示:
document.addEventListener('DOMContentLoaded', function() {
//code here
});
您的浏览器环境是否支持DOM节点列表上的forEach方法。要检查,console.log(NodeList.prototype.forEach)代码>您应该得到如下内容:函数forEach(){[native code]}
如果不支持,则不支持它,因此会出现错误
要消除对NodeList.forEach的不支持,您可以尝试以下方法:
var inputs = [].slice.call(document.querySelectorAll('.controls input'));
现在,这将输出一个元素数组而不是节点列表,并允许您访问该数组。原型函数文档。querySelectorAll
不返回数组。它返回类似于DOM集合的数组,它没有forEach
代码>。谢谢你Yeldar Kurmangaliyev,这很有效perfectly@YeldarKurmangaliyev请看,我非常感谢这篇资源,它确实非常有用。document.querySelectorAll
不返回数组。它返回类似于DOM集合的数组,它没有forEach
代码>。谢谢你Yeldar Kurmangaliyev,这很有效perfectly@YeldarKurmangaliyev看到了,我很感激这个资源,非常有用。这在Firefox中运行得很好,谢谢。然而,在Chrome(41.0.2272.89版)中,我不断收到此错误意外标记=>
。我的ES6的其余部分使用的是Chrome,而不是“箭头功能”。为什么会这样?@OldGill你为什么要使用chrome版本41?chrome稳定版为55。chrome、chrome 45+支持箭头功能。看,我认为这与我的旧操作系统有关。我在OSX Lion 10.7.5上,我的Chrome是这个版本的最新版本。在读到将旧的OSX更新到约塞米蒂后,我一直不愿意更新我的系统。我不确定El Capitan或Sierra是否存在同样的问题,我将不得不对这些问题做一些阅读。@OldGill See。最后一个环节是铬的原始构建。原始版本的可用性在*nix上下降,但在mac上明显上升,因为该网站声明“20分钟前更新”。虽然可能,但运行原始构建需要一些过程。尚未尝试OSX,不确定是否需要为OSX采取其他措施。我非常感谢你的帮助和资源,我一定会调查的。这在Firefox中运行良好,谢谢。然而,在Chrome(41.0.2272.89版)中,我不断收到此错误意外标记=>
。我的ES6的其余部分使用的是Chrome,而不是“箭头功能”。为什么会这样?@OldGill你为什么要使用chrome版本41?chrome稳定版为55。chrome、chrome 45+支持箭头功能。看,我认为这与我的旧操作系统有关。我在OSX Lion 10.7.5上,我的Chrome是这个版本的最新版本。在读到将旧的OSX更新到约塞米蒂后,我一直不愿意更新我的系统。我不确定El Capitan或Sierra是否存在同样的问题,我将不得不对这些问题做一些阅读。@OldGill See。最后一个环节是铬的原始构建。原始版本的可用性在*nix上下降,但在mac上明显上升,因为该网站声明“20分钟前更新”。虽然可能,但运行原始构建需要一些过程。尚未尝试OSX,不确定是否需要为OSX采取其他措施。我感谢你的帮助和资源,我一定会调查此事的。