1.箭头函数(拉姆达表达式)
基本语法
(形参列表) => {
//函数体
}
注意:
1.函数体内如果只有一行代码,那么{}可以省略,如果有return ,那return也可以省略
2.形参列表如果只有一个参数,则括号()可以省略
3.如果想直接返回一个js对象,则可以在对象外面添加小括号
4.箭头函数的自执行
5.箭头函数无this绑定,这一点非常实用
6.箭头函数没有自己的arguments对象,但是可以使用外部的arguments对象,普通匿名函数返回undefined
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
//第一种情况
var sum = (num1,num2) => num1 + num2
console.log(sum(1,2)); //3
//第二种情况
var foo = a => a+3;
console.log(foo(1)); //4
//第三种情况
var foo1 = () => ({name : "Tom"});
console.log(foo1()); //{name : "Tom"}
//第四种情况
var person = (name => {
return {
name : name,
age : 20
}
})("Tom")
console.log(person) //{name : 'Tom',age : 20}
//第六种情况
function foo2(){
return () => arguments[0];
}
var f = foo2(5,6);
console.log(f()); //5
function foo3(){
return function(){
return arguments[0];
}
}
var f1 = foo3(5,6);
console.log(f1()); //undefined
</script>
</body>
</html>
2.对象功能的扩展
2.1简写的属性初始化
1.当对象属性名和本地变量名 相同时,可以省略冒号和值
2.方法的简写,去掉冒号和function
3.在字面量中动态计算属性名
4.新增方法Object.is(),除了两张特殊情况,其余的都相当于 ===
5.Object.assign() 复制一个对象的属性和方法完整的转到另一个对象中,是一种浅复制,只是复制地址值,该方法可接受多个提供者 ,后面的同名属性覆盖前面提供者的属性值
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
//简写属性初始化
function createPerson(name,age){
/*return{
name : name,
age : age
}*/
//效果同上注释里的
return {
name,
age
}
}
console.log(createPerson("Tom",20)); //{name : "Tom",age : 20}
//简写方法
var person = {
/*say : function(){
console.log(1);
}*/
say(){
console.log(1);
}
}
person.say() //1
//字面量动态计算属性名
var attName = 'name';
var p = {
[attName] : "Tom", //属性名用[]括起来,则括号中就可以引用提前定义的变量
age : 20
}
console.log(p[attName]) //"Tom"
//两种特殊情况,其余都一样
console.log(+0 === -0); //true
console.log(Object.is(+0,-0)); //false
console.log(NaN === NaN); //false
console.log(Object.is(NaN,NaN)); //true
</script>
</body>
</html>