ES6学习——day02

函数扩展

参数默认值

这个参数默认值有些像Java里面注解的默认值,跟dart语言中的默认值有着神似之处,要不然怎么说dart和js很像呢。

先上代码吧

1
2
3
4
5
6
7
8
9
10
11
12
{
function test(x, y = 'world'){
console.log(x, y);
}
test('hello'); //打印出来 hello world,当然也可以对y赋值进行更改

let x = 'test';
function test2(x, y = x){
console.log(x, y);
}
test2('kill'); //输出kill kill 可见x的值为kill
}

rest参数

rest参数就是… , 应用场景就是在参数数量可变或者不可预知的时候使用的,这时候…后面的形参会被变成数组传进函数,跟java的…差不多,只是java里面是这样的(java8新特性)

1
2
3
4
5
6
public void test(int... arr){
for(int i: arr){
//打印出参数i
System.out.println(i);
}
}

js代码是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
//rest参数
function test3(...arg) {
//将输入的参数都转为数组
for (let v of arg){
console.log('rest',v);//a b c
}
}
test3('a','b','c');

//将数组转成离散的值
console.log(...[1,2,4]);//1 2 4
console.log('a',...[1,2,4]);//a 1 2 4
}

尾调用

其实就是某个函数的最后一步再调用另一个函数,使用递归函数就经常会有尾递归的情况

1
2
3
4
5
6
7
8
9
10
{
//尾调用:函数的最后一句话是不是函数
function tail(x) {
console.log('tail',x);
}
function fx(x) {
return tail(x);
}
fx(123);//tail 123
}

箭头函数

一个革命性的新特性,向着函数式编程挺进。在java里面有lambda表达式(->),dart中跟js一样是=>,就叫它胖箭头吧。。。

1
2
3
4
5
6
{
//这里的arrow其实就是一个函数
let arrow = v => v * 2;
console.log(arrow(3)); // 6
let arrow2 = () => 2;
}

this绑定

这是一个概念性的问题,在没有箭头函数的函数里面,this就是代表调用这个函数的对象,所以当一个函数中调用另一个函数的时候this可能会发生变化。但是在箭头函数中,this是代表调用这个(箭头函数的函数)的对象,所以箭头函数会是this不变化,不是绝对的具体看情况。

对象扩展

这里的对象是指Object

简洁表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 let o = 1;
let k = 2;
let es5 = {
o: o,
K: k
};
let es6 = {
o,
k
};

let es5_mrthod={
hello:function () {
console.log('hello');
}
};
let es6_method={
hello(){
console.log('hello');
}
};

属性表达式

1
2
3
4
5
6
7
8
9
//属性表达式
let a='b';
let es5_obj={
a: 'c'
};
let es6_obj={
[a]:'c' //这里的a是变量,即b
};
console.log(es5_obj,es6_obj);

新增API

Object.is()

1
2
console.log('字符串',Object.is('abc','abc'));//true 相当于===
console.log('数组',Object.is([],[]),[]===[]);//false false 引用地址不同

Object.assign()

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

语法:Object.assign(target, …sources); 返回拷贝后的对象

1
2
3
4
5
6
7
8
const object1 = {
a: 1,
b: 2,
c: 3
};
const object2 = Object.assign({c: 4, d: 5}, object1);
console.log(object2.c, object2.d);
// expected output: 3 5

Object.entries()

1
2
3
4
let test={k:123,o:456};
for (let [key,value] of Object.entries(test)){
console.log(key,value);
}
-------------本文结束感谢阅读-------------