1. let
let用法基本跟var差不多,只是更加的严谨了。
不存在变量提升,变量要在声明后才能够使用。
不允许在相同作用域重复命名同一变量。
2. const
const 常量,定义后不能再改变,不能赋值,同样不能变量提升,不可重复声明。
3. 变量解构赋值
以前只能这样子写
function data(){
var obj={
a:1,
b:2
}
return obj;
}
var aa=data();
es6可以这样写
function data(){
var a=1,b=2;
return [a,b];
}
var [x,y]=data();
console.log(x); //1
console.log(y); //2
深度匹配
function setting(){
return {display:{color:'red'},keyboard:{layout:‘querty’}};
}
const {display:{color: displayColor},keyboard:{layout:keyboardLayout}} = setting();
console.log(displayColor, keyboardLayout); //red querty
4. 模板字符串
es5填充字符串需要这样
var a=1,b=2;
docuemnt.getElementById('test').appendChild('<b>'+a+'</b><b>'+b+'</b>');
这样的写法很不方便,也很难读懂。
es6可以这样写
let a=1,b=2;
docuemnt.getElementById('test').appendChild(`<b>${a}</b><b>${b}</b>`);
模板字符串是增强版字符串,用反引号(`)标记
5. Math对象的扩充
Math.trunc() 去掉小数部分
Math.sign() 判断一个数是正数,负数还是零
6.函数扩展
- 函数参数默认值
可以设置默认值,eg:
function log(x,y='小明'){
console.log(x,y);
}
log('hello'); //hello 小明
log('hello','xiaoming'); //hello xiaoming
log('nihao',''); //nihao
后来开发人员可以方便的调用你的函数
- rest参数,代替arguments,用途不大,写法(...变量名)
- 扩展运算符
可代替apply方法
Math.max(null,[14,3,77]);
Math.max(...[14,3,7]);
Math.max(14,3,7)
三种写法运行效果相同。
7. 箭头函数
一个参数的写法
var f= v => v
//es5
var f=function(v){
return v;
}
没有参数或者是多个参数
var f = () => 1
//es5
var f = function(){
return 1;
}
var sum = (num1, num2) => num1 + num2;
//es5
var sum = function(num1, num2){
return num1+num2;
}
一个参数其实也是可以加括号的,所以可以统一一下都加括号,就不用记那么多了
var f = (v) => v;
- => 函数使用说明:
(1)函数体this是指定义时所在的对象,不是使用时所在对象。
(2)不可以使用new命令,否则会抛出一个错误。
(3)不可使用auguments对象,可以用rest参数代替。
8.类和对象
es5
var Animal=function(name){
this.name=name;
}
animal.prototype={
speak:function(){
console.log("I am"+this.name);
}
}
var animal = new Animal("cat");
animal.speak(); //I am cat
es6
class Animal(){
constructor(name){
this.name=name;
}
speak(){
console.log("I am"+this.name);
}
}
const animal=new Animal("cat");
animal.speak(); //I am cat
其实我并不觉得这个有很大作用,代码也不会缩少很多,只是适应后台java人员转成前端。不过对于继承却有比较大作用。
9.继承
es5
function A(){
this.a='a';
}
function B(){
this.b='b';
}
B.prototype=new A();
var b=new B();
b.a; //a
B.prototype.a='changed';
b.a; //changed
es6
class A{
constructor(){
this.a='a';
}
}
class B extends A{
constructor(){
super();
this.b='b';
}
}
var b=new B();
b.a; //a
10.promise
用promise可以替代回调函数,不过这个现在用babel还是转不了。没多大用。
es5
function printAfterTimeout(string, timeout, done){
setTimeout(function(){
done(string);
}, timeout);
}
printAfterTimeout('Hello ', 2e3, function(result){
console.log(result);
printAfterTimeout(result + 'Reader', 2e3, function(result){
console.log(result);
});
});
可以看到这样一环一环的进行下去是很恐怖的,也很难维护。
es6的写法是这样的。
function pat(string,timeout){
var p = new Promise((resolve,reject) => {
setTimeout(function(){
resolve(string);
},timeout);
});
return p;
}
pat('hello',1000).then( (result) => {
console.log(result); //hello
return pat(result + ' 小明',2000);
}).then( (result) => {
console.log(result); //hello 小明
})
这个比较难,说明一下:
var p = new promise(function(resolve,reject){});
主要是promise对象上有个then( fn1, fn2);
fn1对应的是resove就是执行成功的函数。
fn2对应的是reject就是执行失败的函数。
在ajax中就会运用到这两个东西。
热门评论
很有帮助的!!!!!
联系加上注释说明一下
function A(){ this.a='a'; } function B(){ this.b='b'; } B.prototype=new A(); var b=new B(); b.a; //a
为什么打印出来是 a 呢?