搞定炫酷网页,关注ES6太有必要

原文链接

导语

温故而知新,可以为师矣。及时地复习和总结我们学过的知识,不仅有利于知识的体系化,还有利于知识的深入理解。笔者也是一个前端技术迷,并且之前也系统的学习ES6一段时间,并对此有一些心得感悟。以下,我将深入浅出地与大家谈谈ES6,希望各位不吝点评。

1.let/const

  • let

js中作用域分为:全局作用域、局部作用域、块级作用域 es6中的六种变量声明方法:var function let const import class.其声明的变量不会被提升;let不能重复声明;


 
 
  1. console.log(a); //not define
  2. console.log(b); //undefine
  3. let a= 110 ; //不能重复声明,不然会报错
  4. var b= 220;
  5. 复制代码

let声明的变量的作用域都是块级的,通常以{}来化分块级作用域;


 
 
  1. if( true){
  2. let = 10;
  3. }
  4. console.log(a); //not define
  5. 复制代码
  • const

const声明的变量的作用域是块级的,声明的变量需赋初始值,且不可改变,也不能提升。


 
 
  1. if(ture){
  2. console.log(PI); //not define
  3. const PI= 3.14;
  4. PI= 888;
  5. console.log(PI);
  6. }
  7. console.log(PI);
  8. 复制代码

2.箭头函数

  • 普通的函数

 
 
  1. function f(x,y){
  2. returen x*y;
  3. }
  4. console.log(f( 2, 3)); //6
  5. 复制代码
  • 箭头函数

 
 
  1. var f= (x,y)=>{
  2. return x*y;
  3. }
  4. console.log(f( 2, 3)); //6
  5. 复制代码

如果箭头函数中只有一个形参,那么()可省略;如果函数体中只有一条语句(非return语句),{}也可省略;如果有return,而且只有一条语句,return和{}可省略。如下:

  • 满足条件后,最简形式下的箭头函数

 
 
  1. var f= x=> x*x;
  2. console.log(f( 3)); //9
  3. 复制代码

3.js中形参可以拥有默认值


 
 
  1. function f(x,y=10){
  2. console.log(x,y); //1 10
  3. return x+y
  4. }
  5. console.log(f( 1)); //11
  6. 复制代码

 
 
  1. function f(x=10,y){
  2. console.log(x,y); //1 undefine
  3. return x*y;
  4. }
  5. console.log(f( 1); //NaN
  6. 复制代码

4.变量的结构赋值

结构:从数组或对象中提取值,对变量进行赋值.如果左右结构不一样,具体对应细节看如下代码中所阐述的。


 
 
  1. let [a,b,c,,d,e,f= 12,g,[h]]=[ 1, 2, 3, 4, 5, 6,[ 7],[ 8]]
  2. console.log(a); //1
  3. console.log(b); //2
  4. console.log(c); //3
  5. console.log(d); //5
  6. console.log(e); //undefine
  7. console.log(f); //6
  8. console.log(g); //[7]
  9. console.log(h); //8
  10. 复制代码

 
 
  1. let [a,b,c,,d,e,f= 12]=[]
  2. console.log(a); //undefine
  3. console.log(b); //undefine
  4. console.log(c); //undefine
  5. console.log(d); //undefine
  6. console.log(e); //undefine
  7. console.log(f); //undefine
  8. console.log(g); //12
  9. 复制代码

5.数组扩展

  • Array.from()可以将伪数组转化为真正的数组:类似数组和可遍历的对(包括ES6新增的数据结构Set和Map),是该构造器的静态方法。 Array.from(类数组对象) or Array.from(类数组对象,function(item,index){return})

 
 
  1. var lis= document.getElementsByTagName( "li");
  2. var rs= Array.from(lis);
  3. console.log( Array.isArray(rs)); //true;
  4. 复制代码
  • Array.of()将一组值转换为数组,弥补构造器 Array()的不足

 
 
  1. var arr1= Array.of( 3);
  2. var arr2= Array.of( "3");
  3. console.log(arr1,arr2); //[3] ['3']
  4. 复制代码
  • Array.find():用于找出第一个符合条件的数组元素,找不到则是undefined。格式:Array.find(function(item,index){return 条件;})

 
 
  1. let arr=[{ name: "zs1", score: 90},
  2. { name: "zs2", score: 80},
  3. { name: "zs3", score: 100}
  4. ];
  5. let rs1=arr.find( item=>item.name== "zs1");
  6. let rs2=arr.find( item=>item.name== "zs4");
  7. let rs3=arr.findIndex( item=>item.name== "zs3");
  8. let rs4=arr.findIndex( item=>item.name== "zs4");
  9. console.log(rs1,rs2); //{name:"zs1",score:90} undefined
  10. console.log(rs3,rs4); //2 -1
  11. 复制代码
  • Array.findIndex()第一个符合条件的数组元素的索引。找不到则是-1
  • Array.includes()判断元素是否在数组中存在,返回值是 true|false

 
 
  1. let a=[ 1, 2, 3];
  2. a.includes( 1); //true
  3. a.includes( "a"); //false
  4. 复制代码
  • Array.fill()给数组填充指定值. Array.fill(值) ;Arr.fill(值,起点,终点),填充时不包含终点。

 
 
  1. let arr= new Array( 5);
  2. arr.fill( "*");
  3. let arr1=[ 1, 2, 4, 5, 7]
  4. arr1.fill( "hello", 0, 4)
  5. console.log(arr); //['*','*','*','*','*']
  6. console.log(arr1); //["hello", "hello", "hello", "hello", 7]
  7. 复制代码
  • 数组的扩展运算符

 
 
  1. var arr=[ 1, 2, 3];
  2. var str= "hello";
  3. var arr2=[...str]
  4. var arr1=[...arr]
  5. console.log(arr1); //[1,2,3]
  6. console.log(arr2); //["h", "e", "l", "l", "o"]
  7. 复制代码

6.字符串扩展

    1. 模版字符串

 
 
  1. var age= 10;
  2. var name= "Rose";
  3. console.log( `${name} is my friend ,she is ${age} years old.`) //Rose is my friend ,she is 10 years old.
  4. 复制代码
    1. trim() 左右空格都是去掉 ;trimLeft 左空格去掉;trimRight 右空格去掉
    1. repeat(次数)重复字符串
    1. includes()是否包含某个元素,返回值为true or false
    1. startWith() 、endWith()分别为以哪些开始和结束,返回值为true or false

 
 
  1. var str= " I am a student. ";
  2. console.log(str.trim()); //I am a student.
  3. console.log(str.trimLeft()); //I am a student.
  4. console.log(str.trimRight()); //I am a student.
  5. console.log(str.repeat( 5)); // I am a student. I am a student. I am a student. I am a student. I am a student.
  6. console.log(str.includes( "am")); //true
  7. console.log(str.startsWith( ""),str.endsWith( "")); //true true
  8. console.log(str.padStart( 20, 2),str.padEnd( 20, 2)); //222 I am a student. I am a student. 222
  9. 复制代码

7.set和map的数据结构

  • set
  1. set类似于对象的数组,但是成员的值都是唯一的,没有重复的值;
  2. set构造方法可以接收数组为参数,也可以转化为数组,可用于去除数组中重复值;
  3. 用foreach遍历set数组,for of也可对其遍历。
  4. 删除数组中的元素用Set.delete()。

 
 
  1. var s1= new Set([ 1, 2, 3, "true"]);
  2. console.log(s1); // {1, 2, 3, "true"}
  3. s1.add( 5);
  4. console.log(s1); //{1, 2, 3, "true", 5}
  5. s1.add( 3);
  6. console.log(s1); //{1, 2, 3, "true", 5}
  7. s1.forEach( item=> console.log(item)); //1 2 3 true 5
  8. for( var p of s1){
  9. console.log(p);
  10. } 1 2 3 true 5
  11. console.log( Array.isArray(s1)); //false
  12. console.log( Array.isArray( Array.from(s1))); //true
  13. s1.delete( "true");
  14. console.log(s1); //{1, 2, 3, 5}
  15. //数组去重
  16. var arr1=[ 1, 1, 2, 4, 5, 6, 6, 8];
  17. arr2=[...( new Set(arr))];
  18. console.log(arr2); //[1, 2, 4, 5, 6, 8]
  19. 复制代码
  • map
  1. Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
  2. 可以使用set方法添加元素。
  3. 通过get(键)获取键值,然而当键时引用数据类型时,要比较栈区中的地址
  4. 重复的键会覆盖

 
 
  1. //创建Map
  2. var m= new Map([
  3. [ "a", "hello"],
  4. [ 1, 123],
  5. [[ 1, 2, 3], 123]
  6. ]
  7. );
  8. //添加元素
  9. m.set( "false", false);
  10. m.set( "know",{ true: "true"});
  11. console.log(m); //{"a" => "hello", 1 => 123, Array(3) => 123, "false" => false, "know" => {…}}
  12. //get()获取键值 然而当键时引用数据类型时
  13. console.log(m.get( "know"),m.get([ 1, 2, 3])); //{true: "true"} undefined
  14. let a=[ 1, 2, 3];
  15. m.set(a,{ name: "wangcai"});
  16. console.log(m.get(a)); //{name: "wangcai"}
  17. 当键名重复时,会覆盖。
  18. m.set( "a", 000);
  19. console.log(m); //{"a" => 0, 1 => 123, Array(3) => 123, "false" => false, "know" => {…}, …}
  20. 复制代码

8.Class类

  • 格式:class 类名{constructor(参数){ this.属性=参数;} method(){//对象中方法的简写,省略了function.} }
  • 书写注意事项:class 是关键字,后面紧跟类名,类名首字母大写,采取的是大驼峰命名法则:类名之后是{};在{}中,不能直接写语句,只能写方法,方法不需要使用关键字,方法和方法之间没有逗号。不是键值对。
  • 直接通过类名来访问的方法就是静态方法。如:Math.abs();这里的 abs()是静态方法。Array.isArray();isArray()是静态方法. 在方法名前加 static

 
 
  1. class people{
  2. constructor(name,age,height){
  3. this.name=name;
  4. this.age=age;
  5. this.height=height;
  6. }
  7. static jump(){
  8. console.log( "我能跳100米");
  9. }
  10. say(){
  11. console.log( `我是${this.name},年龄${this.age}岁,身高为${this.height}cm`);
  12. }
  13. }
  14. var person= new people( "Jack", 40, 180);
  15. people.jump(); //我能跳100米 【类的静态方法】
  16. console.log(person.say());
  17. 复制代码

10.严格模式

    1. 严格模式的目的:规则,提高编译效率。
    1. 严格模式和非严格模式区别
    1. 在严格模式下不能使用没有var的变量
    1. 在严格模式下不能8进制的数字
    1. 在严格模式下不能把函数定义在if语句中
    1. 在严格模式下函数不能有重名的形参
    1. 在严格模式下不能arguments不再跟踪形参的变化
    1. 在严格模式下function中的this不指window,调用函数为undefined
    1. 在整个代码段中启动严格模式,还可以在一个函数中启动严格模式:

 
 
  1. "use strict"
  2. function f(a,b){
  3. console.log(a,b); //66 666
  4. console.log( arguments[ 0], arguments[ 1]); //66 666
  5. arguments[ 0]= 1111;
  6. arguments[ 1]= 2222;
  7. console.log(a,b); //66 666
  8. console.log( arguments[ 0], arguments[ 1]); //1111 2222
  9. }
  10. f( 66, 666);
  11. 复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值