Javascript “的含义';x';不是函数或其返回值不可iterable“;错误
我意外地看到,这会导致V8中出现错误(Chrome、Node.js等): TypeError:符号不是函数或其返回值不可编辑 任何其他不可iterable值(包括函数)似乎会导致另一个错误:Javascript “的含义';x';不是函数或其返回值不可iterable“;错误,javascript,node.js,google-chrome,v8,for-of-loop,Javascript,Node.js,Google Chrome,V8,For Of Loop,我意外地看到,这会导致V8中出现错误(Chrome、Node.js等): TypeError:符号不是函数或其返回值不可编辑 任何其他不可iterable值(包括函数)似乎会导致另一个错误: for (let val of function () { throw 'never called' }) { /*...*/ } TypeError:(中间值)不可编辑 如前所述,该错误特定于Chrome: TypeError:“x”不是函数或其返回值不可编辑(Chrome) 作为函数(如Promis
for (let val of function () { throw 'never called' }) { /*...*/ }
TypeError:(中间值)不可编辑
如前所述,该错误特定于Chrome:
TypeError:“x”不是函数或其返回值不可编辑(Chrome)
作为函数(如Promise.all或TypedArray.from)的for…的右侧或作为其参数给出的值不是iterable对象。iterable可以是内置的iterable类型,如数组、字符串或映射、生成器结果或实现iterable协议的对象
似乎所有列出的东西都不希望接受函数而不是iterable作为参数,因此不清楚为什么错误强调函数类型
这个错误有什么意义吗?是否存在
不是函数的情况
备注在上下文中有意义?是的,错误消息的两个部分都有意义。在您手头的情况下,Symbol()
的返回值是不可编辑的,因此这是第二个选项。作为第一个选项的示例,仅以非函数的内容为例:
let NotAFunction = {}; // Or any other object.
for (let val of NotAFunction()) {}
给出:未捕获类型错误:NotAFunction不是函数或其返回值不可编辑
。在这种情况下,notaffunction
显然不是函数;-)
我不知道为什么“它根本不是一个函数”和“它是一个函数,它被调用了,但它的返回类型不可编辑”没有两条单独的错误消息。大概是内部逻辑中实现for..of循环的某些东西使得更细粒度的错误报告变得异常复杂——因此组合的错误消息只提到了循环不工作的两个可能原因。for..of运算符通过迭代器协议将参数传递给变量 迭代器协议指定了@@iterator方法的工作需求,因此,如果函数、对象或类没有实现Symbol.iterator/Symbol.asyncIterator,它将抛出此错误 在第一种情况下,符号是常数,所以它不可数。在第二种情况下,值trowed是一个中间值,这意味着VM无法转换为iterable类型(使用迭代器方法的数组、对象、类或函数),也就是说,由于for..of需要实现@迭代器方法,因此无法执行它以获得结果 重点在于迭代器是一个具有@iterator方法的函数。例如:
常量someIterator={};
someIterator[Symbol.iterator]=函数(名称){
返回{
下一个(){
该指数=0;
收益率名称[索引];
this.index=this.index++;
}
}
}
印刷:
{[Symbol.iterator]: [Function (anonymous)]}
for..of循环的预期方法是迭代器函数。因此,错误消息将使期望函数的用户产生共鸣
要实现该方法,您可以使用ES6类或对象(通过键访问)、原型函数或仅使用生成器执行上述操作。要重新创建该错误消息,请尝试
for(let val of(function(){})(){}
-在您的示例中,您没有调用函数。我怀疑这可能是某些建议的残余,该建议允许传递生成器函数,而不是现在只接受迭代器的生成器@谢谢,这确实触发了错误。这与使用函数构造原语有关。JSC的行为类似for(设数值(1)的val){}
和for(设布尔值(true)){}
发出相同的错误for(让val为1){}
和for(让val为true){}
不执行此操作。V8中字符串的实例。但是,我在字符串表中找不到对条目的引用。[…Symbol()]
将抛出相同的TypeError,移动到此处删除我的答案并继续讨论
{[Symbol.iterator]: [Function (anonymous)]}