ECMAscript 6代码无法运行

3
我是新来的。
我正在阅读一本名为《学习Javascript,第三版》的书籍,其中一个练习是运行以下代码:
"use strict";



let sentences = [
{ subject: 'JavaScript', verb: 'is', object: 'great' },
{ subject: 'Elephants', verb: 'are', object: 'large' },
];
function say( {subject, verb, object} ) {
console.log(`${subject} ${verb} ${object}`);
}
for(let s of sentences) {
say(s);
}

但是出现了这个错误。
SyntaxError : Unexpected token {

这段代码有什么问题?

我正在使用node.js、gulp.js和babel将代码转换为es5代码。

P.S:抱歉我的英语不太好,我还在学习中,尽量不用谷歌翻译。


2
如果我没有错的话, function say( {subject, verb, object} ) 是问题所在。函数参数不需要加 {}。正确写法应该是 function say( subject, verb, object ) - Mjh
4
这是解构语法。问题在于转译器无法在所有情况下处理它。楼主,问题在于你的转译方式。你使用了哪种预设? - Denys Séguret
如果这是解构,那么{subject, verb, object}不应该是{subject:subject, verb:verb, object:object}吗?根据这里的例子https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment,我自己从未使用过它。 - Matt McCabe
2
@MattMcCabe 不,这是正确的语法(当然,长格式也是有效的)。但我们无法直接回答问题,问题出在对babel的调用上,并且没有提供详细描述。楼主,答案可能是你没有将预设传递给babel(请参考https://github.com/babel/babelify)。 - Denys Séguret
@DenysSéguret - 谢谢,我知道这可能是我不知道的东西,所以我发表了评论而不是答案 :) - Mjh
显示剩余6条评论
1个回答

0

我找到了解决方案。

我的 gulp 文件有问题,我安装了 2015 年的预设。

现在我的 gulp 文件是这样的。

var gulp = require('gulp');
var babel = require('gulp-babel');


gulp.task('default', () => {
return gulp.src("es6/**/*.js")
.pipe(babel({presets:["es2015"]}))
.pipe(gulp.dest("dist"));
});

感谢那些帮助过我的人


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接