新增let和const,与var区别:
let和const的区别:
箭头函数是指在定义函数表达式时省略掉function关键字,在小括号和大括号之间加箭头
特殊处:
var fn = a => {}
fn(a)
var fn = (a,b) => a+b
var fn = () =>{console.log(arguments)} 会报错
什么是arguments?
function func1(a, b, c) {
console.log(arguments[0]);
// expected output: 1
console.log(arguments[1]);
// expected output: 2
console.log(arguments[2]);
// expected output: 3
}
func1(1, 2, 3);
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数,arguments对象不是一个 Array 。它类似于Array,但除了 length 属性和索引元素之外没有任何Array属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array:
var args = [].slice.call(arguments);
var obj = {
fn: function(){ console.log(this)},
fn2: () => {console.log(this)}
}
obj.fn() #打印的this是obj对象
obj.fn2 #打印的是window
写法一:
var arr = ['hello','world']
var [a,b]=arr
console.log(a)
写法二:
var [a,b] = ['hello','worls']
console.log(a)
console.log(b)
var obj={name:'lei',age:18}
#定义一个name变量,从obj内获取name变量的值
var {name} = obj
console.log(name) #lei
var {name,age} = obj
console.log(name) #lei
若想获取值时使用别名:
var obj={name:'lei',age:18}
var {name:a}=obj 等价于 var {a} = obj.name
console.log(a) #lei
``
可以用来定义字符串,与单引号、双引号用法一致,区别如下:
${s1}
运算符:
...
var arr=[10,20,30,40]
console.log(...arr) # 10,20,30,40
原理:
去掉数组的中扩号
数组展开:
用途1:合并数字
var arr1=[10,20]
var arr2=[30,40]
var arr3=[...arr1,...arr2] #arr3=[10,20,30,40]
用途2:给函数传递参数
var arr1 = [10,20,30,17]
var max = Math.max(...arr1)
将数组展开,相当于是给函数传多个值,如果不展开函数不是别数组类型,会报错
用途:用于复制
var obj={name: 'liu' ,age='23'}
var obj2={
school: 'xian',
...obj
}
console.log(obj2)
#注意:obj2与obj中有相同成员时,注意顺序问题,后面覆盖前面
用es6的语法写构造函数
class Person{
constructor(name,age){
#这里按照ES5的构造函数体书写
this.name = name
this.age = age
}
#直接写原型的方法
sayHi(){console.log()}
#静态属性
static a = 100
#静态方法
static go () { console.log()}
}
var p1 = new person('liu',18)
p1.sayHi()
#使用静态方法
Person.go()
必须和new关键字一起使用,es5的构造函数可以不和new一起使用
带静态修饰符的方法只能访问静态属性
非静态方法既能访问静态属性也能访问非静态属性
非静态方法不能定义静态变量
静态方法不能使用this关键字
静态方法不能调用非静态方法,反之可以