[TOC]
第一章:概述
课程地址:https://www.imooc.com/video/16703 学习vue的过程中出现很多ES6语法,补充学习
1-1:课程介绍
ES3 ES5 ES6的对比讲解
常量、作用域、箭头函数、默认参数、对象代理
##1-2:环境搭建
第二章:ES6基础 2-1:常量 1 2 3 4 5 6 7 8 9 10 // ES5 中设置常量的语法 Object.defineProperty(typeof global === "object" ? global : window, "PI2", { value: 3.1415926, enumerable: true, writable: false, configurable: false }); // ES6 设置常量的语法 const PI = 3.1415926;
但是下面情况是可以被改变的,如:
1 2 3 4 5 6 7 8 9 10 11 12 const obj={ a:1, b:2 } //修改对象的值是可行的 obj.a=3; // 修改对象是不可行的 obj={ c:1 }; //因为对象是引用类型,const 指向的是对象引用地址,只要地址不变就符合 const 定义。
2-2:作用域
1 2 3 4 5 6 7 8 9 10 11 12 var callbacks2=[]for (var i = 0 ; i <= 2 ; i++) { callbacks2[i] = function ( ) { return i * 2 ; }; } console .table([ callbacks2[0 ]() === 0 , callbacks2[1 ]() === 2 , callbacks2[2 ]() === 4 ])
1 2 3 4 5 6 7 8 9 10 11 12 let callbacks = [];for (let i = 0 ; i <= 2 ; i++) { callbacks[i] = function ( ) { return i * 2 ; }; } console .table([ callbacks[0 ]() === 0 , callbacks[1 ]() === 2 , callbacks[2 ]() === 4 ])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 (function ( ) { var foo = function ( ) { return 1 ; } foo() === 1 ; (function ( ) { var foo = function ( ) { return 2 ; } foo() === 2 ; })(); foo() === 1 ; })(); { function foo ( ) { return 1 } foo() === 1 { function foo ( ) { return 2 } foo() === 2 } foo() === 1 }
2-3:箭头函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var evens = [1 , 2 , 3 , 4 , 5 ];var odds = evens.map(function (v ) { return v + 1 ; }); var pairs = evens.map(function (v ) { return { even: v, odd: v + 1 }; }); var nums = evens.map(function (v, i ) { return v + i; }); console .table(evens, odds, pairs, nums)
1 2 3 4 5 6 7 8 9 10 11 12 13 let evens = [1 , 2 , 3 , 4 , 5 ];let odds = evens.map(v => v + 1 )let pairs = evens.map(v => ({ even: v, odd: v + 1 })) let nums = evens.map((v, i ) => v + i)console .table(evens, odds, pairs, nums)
this 的不一样1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var factory=function ( ) { this .a='a' ; this .b='b' ; this .c={ a:'a+' , b:function ( ) { return this .a } } } console .log(new factory().c.b());
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var factory=function ( ) { this .a='a' ; this .b='b' ; this .c={ a:'a+' , b:() => { return this .a } } } console .log(new factory().c.b());
2-4:参数
1 2 3 4 5 6 7 8 9 function f (x, y, z ) { if (y === undefined ) y = 7 ; if (z === undefined ) z = 42 ; return x + y + z; }; console .log(f(1 ));
1 2 3 4 5 6 7 function f (x, y = 7 , z = 42 ) { return x + y + z } console .log(f(1 ));
如何让 x 参数成为必选参数呢?不设置这个参数就报错
1 2 3 4 5 6 7 8 9 function checkParameter ( ) { throw new Error ('can\'t be empty!' ) }; function f (x = checkParameter( ),y = 2,z = 3) { return x + y + z } console .log(f());
1 2 3 4 5 6 7 8 9 10 11 12 13 function f (a,b ) { return a+b } function f ( ) { var a = Array .prototype.slice.call(arguments ); var sum = 0 ; a.forEach(function (item ) { sum+=item*1 }) return sum }
1 2 3 4 5 6 function f (...a ) { var sum = 0 ; a.forEach(item => {sum+=item*1 }); return sum }
比如要合并两个数组
1 2 3 4 5 6 7 var params = [ "hello" , true , 7 ];var other = [ 1 , 2 ].concat(params);var params = [ "hello" , true , 7 ]var other = [ 1 , 2 , ...params ]
2-5:代理 什么是对象代理呢?就是不让用户直接访问一个对象,只能通过代理去操作,类似于中介。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var Person = function ( ) { let data = { name: 'es3' , sex: 'male' , age: 15 }; this .get = function (key ) { return data[key]; } this .set = function (key, value ) { if (key !== 'sex' ) { data[key] = value } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var Person = { name: 'es5' , age: 15 }; Object .defineProperty(Person, 'sex' , { writable: false , value: 'male' }); console .table({name : Person.name, sex : Person.sex, age : Person.age});Person.name = 'es5-cname' ; try { Person.sex = 'female' ; } catch (e) { console .log(e); } console .table({name : Person.name, sex : Person.sex, age : Person.age});
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 let Person = { name: 'es6' , sex: 'male' , age: 15 } let proxy = new Proxy (Person, { get (target, key) { return target[key] }, set (target, key, value) { if (key !== 'sex' ) { target[key] = value; } } }); console .table({name : proxy.name, sex : proxy.sex, age : proxy.age});try { proxy.sex='female' ; } catch (e) { console .log(e); } console .table({name : proxy.name, sex : proxy.sex, age : proxy.age});
第三章:常用补充
参考:https://www.jianshu.com/p/287e0bb867ae
字符串
1 2 3 4 5 6 var name = 'lux' console .log('hello' + name)const name = 'lux' console .log(`hello ${name} ` )
import 和 export
1 2 3 4 5 6 7 8 9 var sex="boy" ;var echo=function (value ) { console .log(value) } export {sex,echo}
1 2 3 4 5 import {sex,echo} from "./a.js" console .log(sex) echo(sex)
1 2 3 4 5 6 7 var sex="boy" ;export default sex(sex不能加大括号)
1 2 3 4 5 import any from "./a.js" import any12 from "./a.js" console .log(any,any12)
Promise Promise概念介绍 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 const fs = require ('fs' )function getFileByPath (fpath ) { return new Promise (function (resolve, reject ) { fs.readFile(fpath, 'utf-8' , (err, dataStr) => { if (err) return reject(err) resolve(dataStr) }) }) }
使用Promise解决回调地狱 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 const fs = require ('fs' )function getFileByPath (fpath ) { return new Promise (function (resolve, reject ) { fs.readFile(fpath, 'utf-8' , (err, dataStr) => { if (err) return reject(err) resolve(dataStr) }) }) } getFileByPath('./files/1.txt' ) .then(function (data ) { console .log(data) return getFileByPath('./files/22.txt' ) }) .then(function (data ) { console .log(data) return getFileByPath('./files/3.txt' ) }) .then(function (data ) { console .log(data) }) .catch(function (err ) { console .log('这是自己的处理方式:' + err.message) })
演示Jquery中Promise 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" > <meta name="viewport" content="width=device-width, initial-scale=1.0" > <meta http-equiv="X-UA-Compatible" content="ie=edge" > <title>Document</title> </ head><body> <input type="button" value="获取数据" id="btn" > <script src="./node_modules/jquery/dist/jquery.min.js" ></script> <script> $(function () { $('#btn').on('click', function () { $.ajax({ url: './ data.json', type: ' get ', dataType: 'json' }) .then(function (data) { console .log(data) }) }) }); </script> </ body></html>