esnext

SJS 支持部分 ES6 语法。

let & const

代码示例在开发者工具中预览效果

  1. // demo.sjs
  2. function foo(){
  3. let str = 'hello sjs';
  4. if (true) {
  5. let count = 2;
  6. }
  7. console.log(str); // hello sjs
  8. console.log(count); // 引用错误:count 未定义
  9. }

箭头函数

代码示例在开发者工具中预览效果

  1. // demo.sjs
  2. const arr = [1, 2, 3];
  3. const double = x => x * 2;
  4. console.log(arr.map(double)); // output: [2, 4, 6]
  5. var obj = {
  6. birth: 1970,
  7. getAge() {
  8. const b = this.birth;
  9. const fn = () => new Date().getFullYear() - this.birth;
  10. return fn();
  11. }
  12. };
  13. obj.getAge();

更简洁的对象字面量(enhanced object literal)

代码示例在开发者工具中预览效果

  1. var num = 1;
  2. var obj = {
  3. num, // 对象属性
  4. printNum() { // 对象方法
  5. console.log(num);
  6. }
  7. };
  8. obj.printNum(); // 1

注: 不支持super关键字,不能在对象方法中使用super

模板字符串(template string)

  1. const NAME = 'sjs';
  2. const msg = `hello ${NAME}`; // hello sjs

解构赋值(Destructuring)

代码示例在开发者工具中预览效果

  1. // array 解构赋值
  2. var [a, ,b] = [1, 2, 3];
  3. a === 1; // true
  4. b === 3; // true
  5. // 对象解构赋值
  6. let { foo , bar } = { foo: 'aaa', bar: 'bbb' };
  7. // foo = 'aaa'
  8. // bar = 'bbb'
  9. // 函数参数解构赋值
  10. // 1.参数是一组有次序的值
  11. function f1([x, y, z]) {
  12. console.log(x); // 1
  13. console.log(y); // 2
  14. console.log(z); // 3
  15. }
  16. f1([1, 2, 3]);
  17. // 2.参数是一组无次序的值
  18. function f2({x, y, z}) {
  19. console.log(x); // 1
  20. console.log(y); // 2
  21. console.log(z); // 3
  22. }
  23. f2({z: 3, y: 2, x: 1});
  24. // 解构赋值默认值
  25. var [a = 1] = [];
  26. a === 1; // true
  27. // 函数参数:解构赋值 + 默认值
  28. function r({a, b, c = 3, d = 4}) {
  29. return a + b + c + d;
  30. }
  31. r({a: 1, b: 2}) === 10; // true

Default + Rest + Spread

代码示例在开发者工具中预览效果

  1. // 1. Default
  2. function f1(x, y = 2) {
  3. // 如果不给y传值,或者传值为undefied,则y的值为12
  4. return x + y;
  5. }
  6. f1(1) === 3; // true
  7. // 2. Rest
  8. function f2(x, ...arr) {
  9. return x * arr.length;
  10. }
  11. f2(3, 'hello', 'sjs') === 6; // true
  12. // 3. Spread
  13. function f3(x, y, z) {
  14. return x + y + z;
  15. }
  16. f3(...[1,2,3]) == 6; // 数组解构
  17. // 4. Rest + Spread
  18. const [a, ...b] = [1, 2, 3]; // 数组解构赋值, b = [2, 3]
  19. const {c, ...other} = {c: 1, d: 2, e: 3}; // 对象解构赋值, other = {d: 2, e: 3}
  20. const f = {...other}; // 对象解构 f = {d: 2, e: 3}