JavaScript

ECMAScript 6 实用特性

2019-03-08  本文已影响0人  夜半暖人心

关于ES6

ES6是 JavaScript 语言的下一代标准,提供了有利于开发的新特性

1.变量与常量声明:

let 和 const 命令差别:let定义变量,可以被重新赋值;const定义常量,不能被重新赋值。

let const
不会变量提升 不会变量提升
有块级作用域(大括号内的变量/常量无法被外部访问) 有块级作用域
不能在同一作用域内重复声明,可以重新赋值 不能在同一作用域内重复声明,无法修改值(成为常量)

2.对象快速赋值

<script>
    let name = "jack";
    let skill = "跳海";
    let sayHi = function(){
        console.log("rose,byebye");
    };

    let person = {
        name,//等同于name:name
        skill,//等同于skill:skill
        sayHi,//等同于sayHi:sayHi
        //方法的简写方式,等同于jump:function(){console.log("rose也一起跳了")}
        jump(){
            console.log("rose也一起跳了");
        }
    };
   
    console.log(person.name);//jack
    console.log(person.skill);//跳海
    person.sayHi();//rose,byebye
    person.jump();//rose也一起跳了
</script>

3.箭头函数(Arrow Function):

Ⅰ.常规函数的定义:

方式1:函数表达式
var fn1 = function(a, b) {
    return a * b
}

方式2:函数式声明
function fn2(a, b) {
    return a * b
}

Ⅱ.ES6箭头函数语法

NO. 语法
1. 将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体
2. 函数体只有只包含一个表达式,连{ ... }和return都可以省略掉
3. 参数只有一个可以省略()
如:
  var fn = function(a,b){
        return a*b;
    }
  console.log( fn(3,4) );//12

可以简写为:
  var fn = (a,b)=>a*b;
  console.log( fn(3,4) );//12

若是参数只有一个可以省略():
  var fn = a=>a*4;
  console.log( fn(3) );//12

注意:
如果要返回一个对象,这么写的话会报错:
// SyntaxError:
x => { foo: x }

应该要改成:
x => ({ foo: x })

箭头函数的作用:

NO. 语法
1. 箭头函数this指向,由上下文确定
2. 函数体只有一个表达式,连{ ... }和return都可以省略掉
3. 参数只有一个可以省略()

4.ES6模板字符串

模板字符串用于字符串拼接,用反引号标识

<script>

     //模板字符串的应用:拼接字符串
          let writer = "baojun";
          //ES5
          let point1 = "前端码农"+writer;
          console.log(point1);//前端码农baojun
          //ES6
          let  point2 = `编程菜鸡${writer}`;
          console.log(point2);//编程菜鸡baojun

</script>

5.扩展运算符:

Ⅰ.从rest参数说起
rest参数就是用'...变量名'的形式替代了函数参数中的arguments对象,它是一个数组

    <script>
        function study (fist, ...rest) {
            console.log(fist);  //欢迎
            console.log(rest);  //["学习", "E", "S", "6"]
        }
        study("欢迎","学习","E","S","6");
        //如果在参数中只传入rest参数的话,它代表的就是将所有arguments对象当成元素的数组
    </script>

Ⅱ.扩展运算符:
其实就是rest参数的逆运算,用'...数组名'将一个数组转为用逗号分隔的参数序列


<script>

     //扩展运算符的运用
       //1.替代数组中的apply方法
       let arr = [1,2,3];
       function test (a,b,c) {
           console.log(a);
       }
       //ES5写法
       test.apply(null,arr);//1
       //ES6写法
       test(...arr)//1



       //2.合并数组
       let arr1 = [1,2];
       let arr2 = [3,4];
       let arr3 = [5,6]
       //ES5写法
       var arr4 = arr1.concat(arr2,arr3);
       console.log(arr4);//[1, 2, 3, 4, 5, 6]
       var arr5 = [...arr1,...arr2,...arr3]
       console.log(arr5);//[1, 2, 3, 4, 5, 6]
        
</script>

6.解构赋值:

可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值

<script>
       //解构赋值的应用
          //1.数组的解构赋值
          let [h,i,j] = [1,2,3];
          console.log(h);//1

          //2对象的解构赋值
          let {name,age} = {name:"baojun",age:18};
          console.log(name);//"baojun"
          
          //字符串的解构赋值
          let [a,b,c,d,e] = "hello";
          console.log(a);//"h"
          

</script>

7.ES6数组新方法:

Ⅰ.es6 arr.filter() 数组过滤

NO. 运行步骤
1 创建新数组,不改变原数组
2 输出的是判断为true的数组元素形成的新数组
3 回调函数参数,item(数组元素,必选)、index(元素对应的序列号,可选)、arr(数组本身可选)
4 使用return操作输出,会循环数组每一项,并在回调函数中操作
 <script>
      //es6 filter() 数组过滤

      var arr = [1, 2, 3, 4, 5];
      var newArr = arr.filter(function (item, index) {
          return item > 2 && item < 5; //根据判断为true来遍历循环添加进新数组
      })
      console.log(newArr); //打印新数组: [3, 4]
      console.log(arr); //打印原数组: [1, 2, 3, 4, 5]
</script>

Ⅱ.es6 arr.find() 数组查找

NO. 运行步骤
1 不创建新数组,不改变原数组
2 输出的是一旦判断为true则跳出循环,输出符合条件的数组元素
3 回调函数参数,item(数组元素,必选)、index(元素对应的序列号,可选)、arr(数组本身可选)
4 使用return操作输出,会循环数组每一项,并在回调函数中操作
<script>
      var arr = [1, 2, 3, 4, 5];
      var new2 = arr.find(function (item, index) {
          return item.toString().indexOf(5) > -1; //把当前数组元素转为字符串,则可index()>-1判断是否含有某字符
      })
      console.log(new2) //打印符合条件的元素:5
      console.log(arr); //打印原数组[1, 2, 3, 4, 5]
</script>

本文同步发表在我的个人博客:https://www.lubaojun.com/

上一篇下一篇

猜你喜欢

热点阅读