SJS 支持部分 ES6 语法。
function test(){ let a = 5; if (true) { let b = 6; } console.log(a); // 5 console.log(b); // 引用错误:b 未定义 }
const a = [1,2,3]; const double = x => x * 2; // 箭头函数 console.log(a.map(double)); var bob = { _name: "Bob", _friends: [], printFriends() { this._friends.forEach(f => console.log(this._name + " knows " + f)); } }; console.log(bob.printFriends());
var handler = 1; var obj = { handler, // 对象属性 toString() { // 对象方法 return "string"; }, };
注意: 不支持super
关键字,不能在对象方法中使用 super
。
const h = 'hello'; const msg = `${h} taobao`;
// array 解构赋值 var [a, ,b] = [1,2,3]; a === 1; b === 3; // object 解构赋值 var { op: a, lhs: { op: b }, rhs: c } = getASTNode(); // object 解构赋值简写 var {op, lhs, rhs} = getASTNode(); // 函数参数解构赋值 function g({name: x}) { console.log(x); } g({name: 5}); // 解构赋值默认值 var [a = 1] = []; a === 1; // 函数参数:解构赋值 + 默认值 function r({x, y, w = 10, h = 10}) { return x + y + w + h; } r({x:1, y:2}) === 23;
// 函数参数默认值 function f(x, y=12) { // 如果不给y传值,或者传值为undefied,则y的值为12 return x + y; } f(3) == 15; // rest function f(x, ...y) { // y是一个数组 return x * y.length; } f(3, "hello", true) == 6; function f(x, y, z) { return x + y + z; } f(...[1,2,3]) == 6; // array spread const [a, ...b] = [1,2,3]; // array rest, b = [2, 3] const {c, ...other} = {c: 1, d: 2, e: 3}; // object rest, other = {d: 2, e: 3} const d = {...other}; // object spread