【ECMAScript6.0】es6 要点(一)面向对象

var 与 let,const的区别

var

  • 可以重复声明
  • 无法限制修改
  • 没有块级作用域

let 不能重复声明,变量-可以修改,块级作用域
const 不能重复声明,常量-不能修改,块级作用域

函数

箭头函数——只是一种简写

function 去掉 ,加=>

#es5
function () {

}
#es6
()=>{

}
  • 如果只有一个参数,()可以省
  • 如果只有一个return,return和花括号{}可以省
window.onload = function() {
    alert('abc);
};

#es6
window.onload = ()=> {
    alert('abc');
};

函数的参数

  • 参数的扩展/展开
  • 默认参数

参数扩展

  • 搜集剩余的参数(Rest Parameter),但必须是最后一个
function show(a,b,...args) {
    alert(a);
    alert(b);
    alert(args);//args = [3,4,5,6]
}
show(1,2,3,4,5,6);

展开数组

  • 展开后的效果,跟直接把数组的内容写在这儿
let arr=[1,2,3];
show(...arr); //==show(1,2,3)
function(a,b,c){

}

默认参数

  • 可传可不传,传递就听你的,不传递就按默认的。
function show(a,b=1,c=2){//b=1,c=2默认参数
    console.log(a,b,c);
}
show(7,8,9);//result: 7,8,9

解构赋值

解构=“拆”

  • 左右两边结构必须一样
  • 右边必须是个东西
  • 声明和赋值不能分开,必须在一句话里面
let arr=[1,2,3];
#解构赋值
let [a,b,c]=[1,2,3];//左右两边必须一样
let {a,b,c}={a:1,b:2,c:3};//json

let [{a,b,c},[n1,n2,n3],num,str]=[{a:1,b:2},[1,2,3],1,'abc']; 
# 等同
let [json,arr,num,str][{a:1,b:2},[1,2,3],1,'abc'];
console.log(json,arr,num,str);

数组

四个新方法

  • map 映射:一个对一个
  • reduce 汇总:一堆出来一个
  • filter 过滤器
  • forEach 循环(迭代)

map

let arr = [1,2,3];

let result = arr.map(function(item){
    return item*2;
});
alert(result);
# 箭头函数改写
let result = arr.map(item=>item*2);

reduce

# 求和
let arr = [1,2,3,4,5,6];
let result = arr.reduce(function(tmp,item,index){
    return tmp+item;
    //tmp:中间结果
    //item:arr中的元素,index:下标
});
alert(result);
# 求平均数
let arr = [1,2,3,4,5,6];
let result = arr.reduce(function(tmp,item,index){
    if(index!=arr.length-1){//不是最后一个
        return tmp+item;
    }else {//是最后一个数
        return (tmp+item)/arr.length;
    }
});
alert(result);

filter

let arr = [1,2,3,4,5,6];
let result = filter(item=>item%3==0);

alert(result);
    let arr = [
        {title:'a',price:10002},
        {title:'b',price:999},
        {title:'c',price:789},
        {title:'d',price:10090},
        {title:'e',price:11122},
    ];
    let result=arr.filter(json=>json.price>=10000);
    console.log(result);

forEach

let arr = [1,2,3];
arr.forEach((item,index)=。{
    alert(index+':'+item);
});

字符串

  • 多两个新方法
    startsWith //以…开头
    endsWith //以…结尾
  • 字符串模板

两个新方法

let str= 'http://abc.com';
if(str.startsWith('http://')){

}else if(){

}
let str = 'a.txt';
if(str.endsWith('.txt'){
    alert('文本文件');
})

字符串模板
1、直接把东西塞到字符串里面 ${东西}
2、可以折行
反单引号`

let a=12;
let str = `a${a}c`;//str = a12c
# 字符串拼接
let title = '标题';
let content = '内容';
let str = '<div>\
     <h1>'+title+'</h1>\
     <p>'+content+'</p>\
</div>';
#改写
let str2 = `<div>
        <h1>${title}</h1>
        <p>${content}</p>
</div>`;

ES6的面向对象

新旧对比
1、class关键字,构造器和类分开
2、class中直接加方法

特点

  • 继承

旧版

function User(name,pass){
    this.name = name;
    this.pass = pass;
}
User.prototype.showName = function() {
    alert(this.name);
}
User.prototype.showPass = function() {
    alert(this.pass);
}
var user = new User('blue','123');

user.showName();
user.showPass();

新版

class User{
    constructor(name,pass){
        this.name = name;
        this.pass = pass;
    }
    showName() {
        alert(this.name);
    }
    showPass() {
        alert(this.pass);
    }
}
var user = new User('blue','123');

user.showName();
user.showPass();

继承

class vipUser extends User{
    constructor(name,pass,level){
        super(name,pass); //super关键字,超类(父类)
        this.level = level;
    }
    showLevel(){
        alert(this.level);
    }
}
var v1 = new vipUser('blue','123');
v1.showName();
v1.showPass();
v1.showLevel();

应用 React

  • 组件化——class
  • JSX (JSX==babel==browser.js),JS扩展版本
class Test extends React.Component {
            constructor(...args) {
                super(...args);
            }
            render(){
                return <span>123</span>;
            }
        }
        window.onload = function() {
            let oDiv = document.getElementById('div1');

            ReactDOM.render(
                <Test></Test>,
                oDiv
            );
        };

JSON

  • JSON对象
    JSON.stringify;
    JSON.parse;
  • JSON简写(名字一样;方法)
let json = {a:1,b:2};
let str = 'http://abc.com?data='+encodeURIComponent(JSON.stringify(json)); //stringify字符串化

json 标准写法
1、只能用双引号
2、所有的名字都必须用引号包起来

let str = '{"a":12,"b":5"c":"abc"}';
let json = JSON.parse(str);

简写
1、名字与值一样的时候,可保留一个

let a =1;
let b =5;
let json = {a:a,c:b};//等价于let json = {a,c:b};

2、方法简写

let json = {
    a:1,
    show(){
        alert(this.a);
    }
}
json.show();

猜你喜欢

转载自blog.csdn.net/ImagineCode/article/details/81071379