整理一下ES6的学习笔记

ES6开发环境搭建:

1.新建dist 和src文件  index.html   src下新建index.js文件  

2.npm init -y  初始化生成 package.json文件  -y的意思是默认的 不用一步步回车确认

3.全局安装babel-cli  npm install -g babel-cli

4.本地安装babel-preset-es2015 和bable-cli   npm install bable-preset-es2015 babel-cli -D     将es6转化成es5

5.新建.babelrc文件  配置如下:

{

"presets":[

"es2015"

],

"plugins":[]

}

6.将src下的index.js(es6)打包成dist下的index.js(es5) babel src/index.js -o dist/index.js

7.通过npm run build 编译成es5  package.json配置如下:

"scripts": {

    "build": "babel src/index.js -o dist/index.js"

  }

8.var 全局声明  let局部声明  const常量声明 定义了之后不允许改变

9.解构赋值 

数组解构:let[a,b,c]=[1,2,3]  let[a,[b,c],d]=[1,[2,3],4]; 

      默认值 let[fool=true]=[]  let[a,b="ding"]=["westnbrook-"];  console.log(a+b) // westbrook-ding

       undefined为空值 null 有值不为空

对象赋值:let{a,b}={a:"li",b:"si"};

字符串赋值:const[a,b,c,d]="west";  a="w"  b="e" c="s" d="t";

10.扩展运算符 ...arg 函数 function(...arg)  数组赋值不同时改变 let arr2=[...arr1] 

rest运算符 function(first,...arg)


11.字符串模板 全局安装live-server   npm install -g live-server  热更新  运行本地服务器  live-server 相当于npm run dev

let name="dingge";

let dec=`es6是一门好用的课程,${name}正在学习改课程!`;

查找字符串

dec.includes(name); // true   includes相当于indexOf 但是不需要判断是否大于-1

dec.startsWith(name); // 开头有没有  

dec.endsWith(name); // 结尾有没有


复制字符串 document.write("json1".repeat(3))  .repeat(数量)

12 二进制声明 binary 以0B开头+二进制数

let binary=0B010101;

  八进制声明 Octal 以0o开头+八进制数

let octal=0o666;


  Number.isFinite(a); 判断是否为数字

  Number.isNaN();判断是否为非数字

  Number.isInteger(); 是否为整数

  Number.parseInt();转换为整数

  Number.parseFloat(); 转换成浮点数

  Number.MAX_SAFE_INTEGER 最大安全整数

  Number.MIN_SAFE_INTEGER 最小安全整数

  Number.isSafeInteger()  是否是安全整数


13 数组的相关方法:a. json数组格式  let json={

"0":"westbrook",

"1":"george",

"2":"anthony"

将json数组格式转化为数组:let arr=Array.from(json);


b. 将以逗号分割的字符串转化成数组 Array of()

let str="westbrook,george,anthony"; 

let arr=Array.of(str);  或者  let arr=Array.of("westbrook","george","anthony");


c.数组实例的find()方法 查找数组中的元素

let arr=["1","2","3","4","westbrook","george","anthony"];

let res=arr.find(function(value,index,arr){

return index>5;  // george  找到了就不执行了

})


d.fill(要替换成的元素,要替换的位置的起始下标,要替换的位置的结束下标)  替换数组元素  包含开始不包含结束

let arr=["a1","bc","df"];

let res=arr.fill("c",1,3)  // ["a1","c","c"]


f.遍历数组 for of 

item of arr  item 为数组元素

item of arr.keys() item 为数组的下标

item of arr.entries()  item 为单个[下标,元素]

[index,val] of arr.entries() index 为下标 val为元素


g. entries 条目

let arr=["a","b","c"];

let list=arr.entries();

console.log(list.next().value)   // [0,"a"]

console.log(list.next().value)   // [1,"b"]

console.log(list.next().value)   // [2,"c"]


14.throw new Error("a is error") 抛出异常

 use strict 严格模式  可以在函数里使用

 add.length  函数形参的长度默认参数除外    add为函数名

箭头函数: 一行代码不需要加{}

let add=(a,b=1)=>a+b;

console.log(add(1))


15.对象的函数解构:

let json={

a:"westbrook",

b:"george",

c:"anthony"

}

let jiegou=({a,b,c})=>{

console.log(a,b,c);

}

jiegou(json) // westbrook george anthony


数组的解构  展开运算符

let arr=[4,5,6];

let jie=(a,b,c)=>console.log(a+b+c);

jie(...arr);


in的用法:

判断属性是否存在于对象中 返回true 或false  key in obj

判断数组对应下标位置是否有值 返回true 或false  i in arr

let obj={

a:"1",

b:"2"

}

console.log("a" in obj) // true

console.log("c" in obj) // false

let arr=["west",,""];

console.log(0 in arr);  // true

console.log(1 in arr); // false

console.log(2 in arr); // true


遍历数组的方法:

1.forEach()

let arr=["ge","an","west"];

arr.forEach((val,index)=>console.log(index,val))  // 0 ge  1 an  2 west

2.filter() some()

arr.filter(x=>console.log(x)) // ge an west

arr.some(x=>console.log(x))


3.map() 替换

arr.map(x=>"web")  //  ["web","web","web"];


toString()方法  arr.toString()  // ge,an,west

join() 方法  arr.join("-") // ge-an-west


16.对象的赋值

let name="westbrook-ding";

let skill="es6";

let obj={name,skill};

console.log(obj);  // {name:"westbrook",skill:"es6"}


key值的构建

let key="skill";

let obj={

[key]:"es6"

}

console.log(obj); // {skill:"es6"};


对象的is() 方法  严格相等

let obj4={name:"west"};

let obj5={name:"west"};

console.log(Object.is(obj4.name,obj5.name)); // true

// === 同值相等  is() 严格相等

console.log(+0===-0); // true

console.log(NaN===NaN); // false

console.log(Object.is(+0,-0)); // false

console.log(Object.is(NaN,NaN)) // true


对象的assign() 方法 合并几个对象的属性 如果有相同属性则覆盖

let a1={b:"west",c:"brook"};

let b1={c:"-",e:"ding"};

let c1={e:"perfect",g:"good"};

let d1=Object.assign(a1,b1,c1);

console.log(d1);


// Symbol的用法:对对象属性的保护  循环时不输出

let obj6={name:"dingge",skill:"web"};

// 将对象的属性定义成Symbol类型进行保护

let age=Symbol();

obj6[age]=18;

console.log(obj6)

for(let item in obj6){

console.log(obj6[item]);

}

// 通过obj[age] 输出

console.log(obj6[age]); 


16.Set 的用法   数组去重

let setArr=new Set(["west","george","anthony"]);

console.log(setArr); // Set(3){"west","george","anthony"} 跟json一样是一种数据结构

setArr.add("west");

console.log(setArr);  //不允许数组中元素重复

setArr.add("ding");   // add() 类似数组的push方法

console.log(setArr);

// has()查找元素是否存在于数组中 返回true 或false  

console.log(setArr.has("ding")); // true

console.log(setArr.has("li")); // false

// delete()  删除数组某个元素

setArr.delete("west");

console.log(setArr);

// clear() 删除数组所有元素

// setArr.clear();

console.log(setArr);


// 遍历 for of

for(let item of setArr){

console.log(item);

}

// forEach() 方法

setArr.forEach((val)=>console.log(val));

// size属性 等价于length属性

console.log(setArr.size);


// WeakSet() 添加对象  相同的内存地址不允许重复

let weakObj=new WeakSet();

let obj7={a:"westbrook",b:"georeg"};

let obj8={a:"westbrook",b:"georeg"};

weakObj.add(obj7);

weakObj.add(obj8);

console.log(weakObj); // obj7和obj8都存在  因为obj7和obj8是不同的内存地址

let obj9=obj7;

weakObj.add(obj9);

console.log(weakObj); //  obj7存在 obj9不存在  因为obj7和obj9指向同一块内存空间


17 map数据结构  set() get() has() delete() clear()  size

let map=new Map();

// map数据结构 key和value非常灵活 key和value可以设置任意值

let json1={

name:"jsding",

age:25

}

let map=new Map();

// set() 添加值

map.set(json,"wesbrook-ding");

map.set("person",json);

console.log(map);

// get() 通过key获取value

console.log(map.get(json));

console.log(map.get("person"));

// delete(key) 删除 clear() 清除所有

map.delete(json);

console.log(map);

// has()查找

console.log(map.has("person")); // true

console.log(map.has(json)); // false

// size 长度


18.proxy 代理 ES6增强  对象和函数(方法) 预处理  生命周期函数

let obj10={

add:function(a,b){

return a+b;

},

name:"ding"

}

let pro=new Proxy({

add:function(a,b){

return a+b;

},

name:"ding"

},{

get:function(target,key,property){

// 获取值前干些什么

console.log("获取值前干什么");

console.log(target);  // target 为obj10

console.log(key);

return target[key];

},

// value 为新设置的值  receiver为旧值

set:function(target,key,value,receiver){

// 设置值前干点什么

console.log("设置之前干点什么");

console.log(`设置${key}=${value}`);

return target[key]=value;

}

})

console.log(pro.name);

pro.name="westbrook";

console.log(pro.name);


// apply()

let target1=()=>"I am westbrook-ding";

let handler={

apply(target,ctx,args){

// 调用函数前做些什么

console.log("do apply");

return Reflect.apply(...arguments);

}

}

let pro1=new Proxy(target1,handler);

console.log(pro1());


19.promise

// promise 回调地狱 1.洗菜做饭  2.坐下来吃饭 3.收拾桌子洗碗

let state=1;

function step1(resolve,reject){

console.log("1.开始-洗菜做饭");

if(state==1){

resolve("洗菜做饭完成");

} else{

reject("洗菜做饭错误");

}

}

function step2(resolve,reject){

console.log("2.开始-坐下来吃饭");

if(state==1){

resolve("吃饭完成");

} else{

reject("吃饭错误");

}

}

function step3(resolve,reject){

console.log("3.开始-收拾桌子洗碗");

if(state==1){

resolve("收拾桌子洗碗完成");

} else{

reject("收拾桌子洗碗错误");

}

}

new Promise(step1)

.then(function(val){

// 第一步完成时  打印第一步resolve信息

console.log(val);

// 执行第二步

return new Promise(step2);

})

.then(function(val){

console.log(val);

return new Promise(step3);

})

.then(function(val){

console.log(val);

});


20.class的用法: 注意class里面没有逗号 

class People{

// constructor 传递类的参数

constructor(name,age){

this.name=name;

this.age=age;

}

eat(){

console.log(this.name+"吃大餐");

}

play(){

this.eat();

console.log(this.name+"环游世界");

}

}

let person=new People("dingge",25);

console.log(person.name);

console.log(person.age);

console.log(person.eat());

console.log(person.play());

//继承 extends

class Per extends People{


}

let p=new Per;

console.log(p.add());


21.模块化 export import

temp.js中 export val name="westbrook";

index.js中 导入 import {name} from "./temp.js"


temp.js中 导出多个变量 对象方法

let a="west";

let b="web";

let c=18;

export {a,b,c}

index.js 导入  import {a,b,c} from './temp.js'


temp.js中 导出函数

export function add(a,b){

return a+b;

}

index.js中导入  import {add} from './temp.js'


as的用法 重新定义一个语义化的名称

temp.js中 导出多个变量 对象方法

let a="west";

let b="web";

let c=18;

exprot {

name as a,

skill as b,

age as c

}

index.js中导入 import {name,skill,age} from "./temp.js"


export 可以有多个  import引入时 必须带{}

export default只能有一个 import 引入时 不带{}  名称可以自己定义


// 22 es6-yztc

// 01声明变量

// ES5 var 

// ES6 var let const


// 01使用let声明的变量是一个块级作用域变量

{

console.log(a);

// console.log(b);  03 let关键字声明的变量,不存在"声明提升"

var a = 10;

// {}代表一个块级作用域。let声明的变量只在距离它最近的大括号内起作用。

let b = 100;

// let a = 20; 02 let 关键字声明的变量不允许变量名重复。


}

console.log(a);

// console.log(b);


// const 常量修饰符。使用const定义的变量,必须在声明的同时给他赋值,并且该变量中的值是不允许改变的

const PI = 3.14;

console.log(PI);



// 2 展开运算符...

console.log( ...[1,2,3] );


// 3.关于函数

// 01 设置函数形参的默认值

function fun(x=0,y=2){

console.log(x,y);

}


fun(1);


// 02 箭头函数

// function add(x,y){

// console.log(x+y);

// }

var add = (x,y)=>{console.log(x+y)};

add(2,3);

// 箭头函数最大特点是this指针指向问题。

// 普通函数中谁来调用函数,this指针就指向谁。

// 箭头函数中this指针取决外域中this指向。

var obj = {

fn:function(){

console.log(this);//obj

}

}

obj.fn();


var obj2 = {

fn2:()=>{

console.log(this);//window对象

}

}


obj2.fn2();


var obj3 = {

fn3:function(){

// this-->obj3

var test = ()=>{

console.log(this);//obj3

};

test();

}

}


obj3.fn3();


// 结构化赋值

var a,b,c,d;

/*a = 1;

b = 2;

c = 3;

d = 4;*/

[a,b,c,d] = [1,2,3,4];

console.log(a,b,c,d);

[[a,b],c,d] = [[10,20],30,40]

console.log(a,b,c,d);


var x = 10,y=20,z=30;

// 交换两个变量的值

[x,y,z] = [y,z,x];

console.log(x,y,z);//20 30 10


function fun(){

return [10,20,30];

}


var a,b,c;

[a,b,c] = fun();

console.log(a,b,c);


// Map key/value

var map = new Map();

// 01 map存数据

map.set("stu1","张三");

map.set("stu2",{name:"李四"});

console.log(map);

// 02 获取值  根据key获取

console.log( map.get("stu1") );

// 03 判断键值对是否存在

console.log( map.has("stu3") );

// 04 获取map中所有key值

console.log( map.keys() );

// 05 获取map中所有value

console.log( map.values() );


// 06遍历map集合for-of

for( var i of  map.keys() ){

console.log(i,    map.get(i) );

}


猜你喜欢

转载自blog.csdn.net/qq_40083134/article/details/81032108
今日推荐