在尝试理解如何使用KoaJS时,我开始意识到 if (tab[j] && listeService[i] == tab[j][0]) {
resultat.push(tab[j][1]);
j++;
} else {
resultat.push(0);
j++;
}
在babel和amp;之间表现不同。 traceur。 Babel似乎忽略了这个陈述,而traceur抛出异常。
可在此处查看示例:Babel - Traceur或以下:
yield* undefined

我尝试在spec中查找它并且只会引起更多混淆,因为function* gen() {
console.log('will \'yield 1\'');
yield 1;
console.log('will \'yield undefined\'');
yield undefined;
console.log('will \'yield* undefined\'');
yield* undefined;
console.log('will \'yield 2\'');
yield 2;
}
let y = gen();
while(true) {
try {
let r = y.next();
console.log(JSON.stringify(r));
if(r.done)
break;
}
catch(e) {
console.log();
console.log(e);
console.log();
};
}
的规范看起来不像yield
应该返回{{1} (没有值属性),但这是两个转换器中发生的事情(也在上面的示例中)。至于yield undefined
,我没有找到为什么traceur应该抛出的答案。我还没有尝试使用v8(node / iojs)。
所以问题是,两种情况下的正确/预期行为是什么?
答案 0 :(得分:3)
正如您在yield* expression
,expression
needs to have a @@iterator
property的情况下所引用的规范中所见,这需要是一种方法;否则抛出异常。因此,yield* undefined
应该抛出异常,因为undefined
没有@@iterator
属性。
如果是yield undefined
,则应该产生undefined
。这也是发生的事情。但是,在您的示例中,您评估的JSON.stringify({value: undefined, done: false})
会返回'{"done": false}'
,因为JSON中没有undefined
这样的内容。