zoukankan      html  css  js  c++  java
  • ES6


    title: ES6-01
    date: 2017-06-30 15:36:47
    tags: ES6

    前言:

    指导了一些es6的用法,但是一直没有系统的看关于es6的所有改变,于是这次看阮一峰的ES6标准入门,记录下来方便自己查询

    第一章:介绍了babel 如何将es6 转为 所有浏览器都识别的es5

    .babelrc

    {
    	"presets":[
    		"es2015",
    		"stage-2"
    	],
    	"plugins":[]
    }
    

    package

    {
        "name": "es6Demo",
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "scripts": {
            "test": "echo "Error: no test specified" && exit 1",
            "build": "babel src -d lib"
        },
        "repository": {
            "type": "git",
            "url": "git+https://github.com/zeroHu/es6Demo.git"
        },
        "keywords": [],
        "author": "",
        "license": "ISC",
        "bugs": {
            "url": "https://github.com/zeroHu/es6Demo/issues"
        },
        "homepage": "https://github.com/zeroHu/es6Demo#readme",
        "devDependencies": {
            "babel-cli": "^6.24.1",
            "babel-preset-es2015": "^6.24.1",
            "babel-preset-stage-2": "^6.24.1"
        }
    }
    

    title: ES6-02
    date: 2017-06-30 16:51:25
    tags: ES6

    第二章: let和const

    let基本用法

    1.let命令所在的代码块内有效,
    2.let不允许声明重复的变量,
    3.let不会存在变量提升(如果在声明前使用会报错)

    {
    	let a = 0;
    	var b = 1;
    }
    a //ReferenceErr
    b //1
    

    const基本用法

    1.const是声明一个只读的常量,也是代码块内

    if(true){
    	const MAX = 5;
    }
    MAX // Uncaught ReferenceError
    

    title: ES6-03
    date: 2017-06-30 17:26:10
    tags: ES6

    第三章:数组的结构赋值

    3.1 为变量赋值

    es5 声明变量的方式
    
    var a = 1;
    var b = 2;
    var c = 3;
    var sendA = [],
        sendB = [],
        sendC = [];
    
    es6 声明变量的方式
    
    let [a,b,c] = [1,2,3];
    let [sendA,sendB,sendC] = [[],[],[]];
    
    //more example
    let [head, ...tail] = [1, 2, 3, 4]; head // 1
    tail // [2, 3, 4]
    

    这种写法为模式匹配,只要等号两边相等就可以匹配,解构赋值不仅适用于var命令 , 解构不仅可以用于数组,还可以用于对象。,也适用于let和const命令。

    let [x,y,z] = new Set(["a","b","c"])
    //x : a
    

    3.2 对象的解构赋值

    let {a,b} = {foo:"aa",bar:bb}
    
    
    let { a = {}, b= {} } = {};
    

    3.3字符的解构赋值

    	const [a,b,c,d,e] = 'hello';
    	//a  'h'
    	...
    	//e  'o'
    

    3.4函数的解构

    	function add([x+y]){
    		return x+y
    	}
    	add([1,2])//3
    

    title: ES6-04
    date: 2017-07-03 17:07:43
    tags: ES6

    字符串的拓展

    includes(), startsWith(), endsWith()

    • includes():返回布尔值,表示是否找到了参数字符串。
    • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部
    • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
    var s = 'Hello world!';
    s.startsWith('Hello')// true
    s.endsWith('!') // true
    s.includes('o') // true
    

    repeat()

    let newarr = 'x'.repeat(10);
    //'xxxxxxxxxx'
    

    模板字符串"``"

    	let str = 'history';
    	console.log(`this vue mode is ${str}`);//this vue mode is history
    
    
    	const tmpl = addrs => ` <table>
    	${addrs.map(addr => ` <tr><td>${addr.first}</td></tr> <tr><td>${addr.last}</td></tr>
    	`).join('')}
    	</table> `;
    
    	const data = [
    	{ first: '<Jane>', last: 'Bond' }, { first: 'Lars', last: '<Croft>' },
    	];
    	console.log(tmpl(data));
    

    模板编译实例

    let str = 'history';
    console.log(`this vue mode is ${str}`);
    
    
    
    const tmpl = addrs => ` <table>
    	${addrs.map(addr => ` <tr><td>${addr.first}</td></tr> <tr><td>${addr.last}</td></tr>
    	`).join('')}
    	</table> `;
    
    const data = [
    	{ first: '<Jane>', last: 'Bond' }, { first: 'Lars', last: '<Croft>' },
    ];
    console.log(tmpl(data));
    
    

    标签模板

    是用来防止用户输入恶意代码

    	alert`hello`
    	//等价于
    	alert(hello)
    
    	var a = 5; var b = 10;
    	tag`Hello ${ a + b } world ${ a * b }`; // 等同于
    	tag(['Hello ', ' world ', ''], 15, 50);
    

    title: ES6-05
    date: 2017-07-04 11:55:08
    tags: ES6

    数组的拓展

    Array.from()

    Array是将两类对象转为真正的数组,类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和 Map)

    	let arraylike = {
    		'time':'12',
    		'year':'13',
    		'name':'zero'
    	};
    	let array = Array.from(arraylike);
    	console.log(array)
    

    拓展运算符(...)也可以将某些数据结构转为数组

    // arguments对象
    function foo() {
    	var args = [...arguments];
    }
    // NodeList对象
    [...document.querySelectorAll('div')]
    

    数组实例的includes()

    [1,2,34].includes(1);//true
    ['a','b','cd'].includes('f');//false
    

    数组的map filter


    title: ES6-06
    date: 2017-07-04 18:46:19
    tags: ES6

    箭头函数

    var f = f => f
    //等同于
    var f = function(f){
    	return f;
    }
    

    去空,去重,排序函数

    const needPartKong = (arr) => Array.from(new Set(arr));//去重 1
    let needarr = [1,2,3,2,1];
    console.log(needPartKong(needarr));//[ 1, 2, 3 ]
    console.log(needarr);//[ 1, 2, 3, 2, 1 ]
    
    arr = [...new Set(arr)] //去重 2
    

    如果箭头函数不需要参数或者需要多个参数的时候需要用()包含

    var pagejson = {
    	init(){
    		//此处的this指向的并不是 $('.divone') 而是始终指向pagejson
    		$('.divone').click(() => this.getData());
    	},
    	getData(){
    		console.log('get data is ...');
    	}
    }
    

    箭头函数的this指向是不会随绑定的对象而改变的而是定义的时候this的环境


    title: ES6-07
    date: 2017-07-06 14:38:18
    tags: ES6

    Object

    Object.keys()

    	var json = {foo:"1",baz:"2"};
    	Object.keys(json);//['foo','baz']
    

    Object.values()

    	var json = {foo:"1",baz:"2"};
    	Object.values(json);//['1','2']
    

    Object.entries()

    	var json = {foo:"1",baz:"2"};
    	Object.entries(json);//[['foo','1'],['baz','2']]
    

    title: ES6-08
    date: 2017-07-06 21:51:39
    tags: ES6

    Generator函数

    Generator函数有多种理解角度。从语法上,首先可以把它理解成,Generator函数是一个状态机,封装了多个内部状态


    title: ES6-promise
    date: 2017-07-10 19:14:47
    tags: ES6

    promise

    处理后一个ajax 依赖前一个ajax的结果的请求

    <!-- 先定义一个返回Promise对象的Ajax过程 -->
    var ajax = function(option){
        return new Promise(function(resolve, reject){
            $.ajax({
                url: option.url,
                type: option.type || 'get',
                data: option.data || '',
                success: function(data){
                    resolve(data);
                },
                error: function(error){
                    reject(error);
                }
            });
        });
    };
    <!--  启动第一个异步任务 -->
    var p1 = ajax({
        url: 'url1',
        method:'post',
        data:{
        	code:'xxx'
        }
    });
    <!-- 处理第一个异步回调的结果 -->
    p1.then(function(resp1Data){
        console.log(resp1Data);
        <!--  启动第二个异步任务 -->
        return ajax({
            url: 'url2'
        });
    })
    <!--处理第2个异步任务的结果 -->
    .then(function(resp2Data){
        console.log(resp2Data);
    });
    
    

    处理多个ajax之间的请求相互不影响,但是最后执行语句的情况是要求所有ajax都已经执行完毕,返回结果的情况

    jquery 的 $.when就是利用promise实现
    <!-- jquery 封装的when -->
    function getDataFun(){
        var fun1 = $.ajax({url: "/equip_rank",type:'GET',dataType:'jsonp'}),
            fun2 = $.ajax({url: "/score_rank",type:'GET',dataType:'jsonp'}),
            fun3 = $.ajax({url: "/billionaire_rank",type:'GET',dataType:'jsonp'});
        $.when(fun1,fun2,fun3).then(function(data1,data2,data3){
            //成功回调,所有请求正确返回时调用
            console.log(data1[0]);
            console.log(data2);
            console.log(data3);
        },function(){
            //失败回调,任意一个请求失败时返回
            console.log('fail!!');
        })
    }
    
    <!-- promise -->
    var ajax = function(options){
    	return new Promise(function(resolve,reject){
    		$.ajax({
    			url:options.url,
    			type:options.type || 'get',
    			data:options.data || {},
    			success(res){
    				resolve(res);
    			},
    			error(res){
    				reject(res);
    			}
    		})
    	})
    }
    var p1 = ajax({url:'xxxx',type:'post',data:{xxx:'fff'}}),
    	p2 = ajax({url:'xxxx',type:'post',data:{xxx:'fff'}}),
    	p3 = ajax({url:'xxxx',type:'post',data:{xxx:'fff'}});
    Promise.all([p1,p2,p3]).then(function(results){
        results.forEach(function(result){
            console.log(result.statusCode);
        });
    }).catch(function(err){
        console.log(err);
    });
    
    
    
    
    <!-- 实例 -->
    
    
    testPromise(){
        var ajax = function(option){
            return new Promise(function(resolve,reject){
                $.ajax({
                    url:option.url,
                    type:option.type || 'get',
                    data:option.data || {},
                    success(data){
                        resolve(data);
                    },
                    error(data){
                        reject(data);
                    }
                })
            })
        }
        // 获取用户信息
        var p1 = ajax({
            url:'/api/website/user/info/',
            type:'get'
        });
        // 微信签名
        var p2 = ajax({
            url:'/api/website/signature/weixin/',
            type:'post',
            data:{
                url:location.href,
                type:'pay'
            }
        });
        // 获取商品信息
        var p3 = ajax({
            url:'/api/website/pay/product/info/',
            type:'post',
            data:{
                products:'44bd8d05d4f44c629a493b1754da6dc0'
            }
        });
    
        // 异步请求函数
        Promise.all([p1,p2,p3]).then(function(results){
            results.forEach(function(result){
                console.log('all====>',JSON.stringify(result));
            });
        }).catch(function(err){
            console.log(err);
        });
        // 同步请求函数
        p1.then(function(resp1) {
          console.log('resp1', JSON.stringify(resp1));
          console.log(123);
          return p2;
        }).then(function(resp2) {
          console.log(234);
          console.log('resp2', JSON.stringify(resp2))
          return p3;
        }).then(function(resp3) {
          console.log(345);
          console.log('resp3', JSON.stringify(resp3))
        });
    }
    

    图片

  • 相关阅读:
    web socket RFC6455 frame 打包、解包
    Cacti 加入多台主机带宽汇聚
    C-链表实现,保存文件,评估-单项选择题系统课程设计---ShinePans
    ios7.1安装提示"无法安装应用程序 由于证书无效"的解决方式二(dropbox被封项目转移到Appharbor上)
    【模板】第二类斯特林数·列
    2018-8-10-win10-uwp-slider-隐藏显示数值
    2018-8-10-win10-uwp-slider-隐藏显示数值
    2019-1-27-WPF-使用-ItemsPanel-修改方向
    2019-1-27-WPF-使用-ItemsPanel-修改方向
    2018-8-10-win10-uwp-x_Bind-无法获得资源
  • 原文地址:https://www.cnblogs.com/zerohu/p/7504173.html
Copyright © 2011-2022 走看看