esnext

SJS 支持部分 ES6 语法。

let & const

代码示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

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

箭头函数

代码示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

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

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

代码示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

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

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

模板字符串(template string)

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

解构赋值(Destructuring)

代码示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

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

Default + Rest + Spread

代码示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

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