当前位置: > > > JS - ES2015/ES6新特性详解3(默认参数、不定参数、扩展运算符、解构)

JS - ES2015/ES6新特性详解3(默认参数、不定参数、扩展运算符、解构)

相关文章系列:
JS - ES2015/ES6新特性详解1(let、const、For..of循环、迭代器、生成器)
JS - ES2015/ES6新特性详解2(Set, WeakSet, Map, WeakMap、箭头函数)
[当前文章] JS - ES2015/ES6新特性详解3(默认参数、不定参数、扩展运算符、解构)
JS - ES2015/ES6新特性详解4(类、模块、Promises、模板字符串)
JS - ES2015/ES6新特性详解5(代理、反射、Symbols、Unicode编码)
JS - ES2015/ES6新特性详解6(二进制和八进制、尾调用、其他新增的API)

八、Default、Rest、Spread

1,Default(默认参数)

(1)过去我们方法中如果忘了传参数,可以这么来指定默认值。
function f(x, y) {
  y = y || 12;
  return x + y;
}

console.log(f(3));  //15
console.log(f(3,2));  //5

(2)如果用 ES6 我们而已直接这么写:
function f(x, y = 12) {
  return x + y;
}

console.log(f(3));  //15
console.log(f(3,2));  //5

2,Rest(不定参数)

Rest 可以让我们更方便地获取不定参数(或者说剩余参数),而不再需要 arguments
function demo(part1, ...part2) {
    console.log(part1); // 1
    console.log(part2); // [2,3,4,5,6]
}

demo(1,2,3,4,5,6);

3,Spread(扩展运算符)

扩展运算符可以将数组转换为连续的函数参数。
(1)在函数中使用
function f(x, y, z) {
  return x + y + z;
}
// 传递数组的每个元素作为参数
f(...[1,2,3]); // 6


(2)在数组中使用
var parts = ["1", "2"];
var lyrics = ["a", ...parts, "b"]; //["a", "1", "2", "b"]

九、解构(Destructuring)

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

1,从一个数组中得到元素

var array = [1, 2, 3, 4];

//ES5写法
var first = array[0];
var third = array[2];
console.log(first, third);  // 1 3

//ES6写法
const [first, ,third] = array;
console.log(first, third); // 1 3

2,交换两个值

var a = 1;
var b = 2;

//ES5写法
var tmp = a;
a = b;
b = tmp;
console.log(a, b); // 2 1

//ES6写法
[a, b] = [b, a];
console.log(a, b); // 2 1

3,多个返回值的解构

function margin() {
  var left=1, right=2, top=3, bottom=4;
  return { left: left, right: right, top: top, bottom: bottom };
  //return { left, right, top, bottom }; //ES6还可以简写成这样
}

//ES5的写法
var data = margin();
var left = data.left;
var bottom = data.bottom;
console.log(left, bottom); // 1 4

//ES6的写法
const { left, bottom } = margin();
console.log(left, bottom); // 1 4

4,参数匹配的解构

function g({name: x}) {
  return x
}

function m({name}) {
  return name
}

console.log(g({name: 5}))  //5
console.log(m({name: 5}))  //5

5,对象解构(又叫深度匹配)

function settings() {
  return { display: { color: 'red' }, keyboard: { layout: 'querty'} };
}
const { display: { color: displayColor }, keyboard: { layout: keyboardLayout }} = settings();
console.log(displayColor, keyboardLayout); // red querty


评论0