函数默认参数

因为只传入了一个参数,所以console.logb打印出来的是undefined,
return出来的是NaN
那么可以这样处理:


为了代码的严谨,应该给每个参数都这样处理一遍:

但是 如果有多个参数呢?
ES6给了一个方法:

每次函数调用时都会创建一个新的参数对象

剩余参数
假设有一个函数,返回值是所有传入参数的和

因为不知道一共有多少个参数,所以可以改成下面这种写法

如果传入参数里面不全是数字呢?

也可以换一种更‘甜’的写法

...xxx表示逗号后面所有参数的集合,这个集合的名字是xxx
arguments是一个伪数组
...返回的是一个真数组,可以使用数组的方法

补充一点,如何把一个伪数组变成一个真数组呢?
在ES5里,只能用这种方法:
let args = Array.prototye.slice.call(伪数组);
很麻烦对吧,ES6里提供了一个简便的方法:
let args = Array.from(伪数组);
还有更简便的方法:
let args = [...arguments]
展开操作

如果不想写a,b,c呢?别急,还有更骚的操作:


解构赋值
如果有a和b两个变量,如何交换他们的值?

ES6之前的方法:

ES6提供的新方法:

如果有一个对象:

要取出obj的三个变量的值
ES5的方法:

ES6的方法:

还可以使用默认值的方法:

如果只传入了一个参数:

设置默认值:

别急,还有糖吃

如果想要 b = 3该怎么写呢?

对象也是一样,

如果想重命名

如果obj里还有一个对象,如

通过这种方法取值

同时也可以重命名

结合上面的默认值

对象浅拷贝

如果此时改变objB.name的值,objA.name的值会发生改变吗?

因为objA.name的值是一个字符串,所以完整的拷贝过来了,
如果在objA.name是一个对象呢?

可以看到,当改变objB.name.x的值以后,objA.name.x的值也发生了改变,
原因是 浅拷贝共用了对象,拷贝的时候实际上只是拷贝了对象的地址。
ES6 浅拷贝方法

对象合并

以前的方法:

ES6的写法:

深拷贝方法
JSON.parse(JSON.stringify(data));需满足以下条件:
这个对象没有复杂的对象,如:
a.日期对象;
b.正则对象;
c.函数;
d.所有普通对象之外的对象...
也就是说,这个方法不适用于复杂对象,
如果要写一个适用于复杂对象的方法 -----递归
还有一些语法糖
如果key和vul是一样的话,可以只写一个:

一些简写:

在一个对象里拷贝另外一个对象

声明一个键和值是已经声明的过的对象,如

以前只能这么写

ES6写法

新版字符串
es6之前,声明一个多行字符串:

中间如果要换行需要加 \ 转义,但是 \ 后面如果有空格会报错,且不容易发现,结果里面没有回车。
第二种写法:

ES6写法

如果想在字符串中间插入变量,之前的写法:

或者:

ES6的写法

一些应用场景:

网友评论