zoukankan      html  css  js  c++  java
  • ES6基础教程,常见特性随笔

          自从2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015发布以来,ES6获得越来越多JS开发者的喜爱,方便简洁。添加了更多的功能,js前景一片大好。下面简单的介绍一下ES6的基础特性,希望可以帮助大家简单的了解ES6。也顺便加固下我的基础。

    正文:
    1.let

    语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。

    let 于 var 区别:

    主要区别在于 let块级作用域, var却是在整个函数都是可见的。

     1             var vararr=[],letarr=[];
     2             for(var i = 0; i < 10; i++) {
     3                 var a={
     4                     testFun:function(){
     5                         alert(i);
     6                     }
     7                 }
     8                 vararr.push(a);
     9             }
    10             vararr[6].testFun();//10
    11             for(let i = 0; i < 10; i++) {
    12                 var a={
    13                     testFun:function(){
    14                         alert(i);
    15                     }
    16                 }
    17                 letarr.push(a);
    18             }
    19             letarr[6].testFun();//6

    这个例子用var的话需要用闭包实现,具体就不写了。

    2.const

    用法:定义常量;一旦定义,你只能去读取它,不要进行其他操作。

    这个就很简单了,常量声明之后必须初始化不允许修改值。

    3.箭头函数

    语法:(这里写参数列表)=>{这里写函数返回值},这个函数永远是匿名的。this 指向函数所在的上下文环境没有 arguments 对象。

    首先减少了匿名函数代码量,锁定了this(js里面很容易跑偏的this)

     1 var obj = {
     2     test: function () {
     3       setTimeout(function () {
     4         console.log(this)
     5       });
     6     }
     7   }
     8   obj.test();//window
     9 var obj2 = {
    10     func: function() {},
    11     test: function () {
    12       var that = this;   //此时的this就是obj对象
    13       setTimeout(function () {
    14         console.log(that)
    15       });
    16     }
    17   }
    18  obj2.test();//Object(obj2)
    19  //es6
    20  var obj3 = {
    21     func: function() {},
    22     test: function () {
    23        setTimeout(() => {console.log(this)});
    24     }
    25   }
    26  obj3.test();//Object(obj3)

    4.解构赋值

    1.数组得解构赋值

    “模式匹配”为变量赋值;var [a, b, c] = [1, 2, 3];

    不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。

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

    对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

     1 var { bar, foo } = { foo: "aaa", bar: "bbb" };
     2 foo // "aaa"
     3 bar // "bbb"
     4 
     5 var { baz } = { foo: "aaa", bar: "bbb" };
     6 baz // undefined
     7 
     8 //也可以显示的转换
     9 var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
    10 baz // "aaa"
    11 //也可以分解字符串(数组)
    12 var [a, b, c, d, e] = 'hello';
    13 a // "h"
    14 b // "e"
    15 c // "l"
    16 d // "l"
    17 e // "o"
    18 //提取json数据,解构赋值对提取json对象中的数据,尤其有用。
    19 
    20 var jsonData = {
    21   id: 42,
    22   status: "OK",
    23   data: [867, 5309]
    24 };
    25 
    26 let { id, status, data: number } = jsonData;
    27 
    28 console.log(id, status, number[1]);

    5.函数参数的默认值

    不再需要我们在函数里面进行判断复制初始值。减少代码量提高了代码的可读性,增加了代码的可控性。

    1 function test(a,b,c,d){
    2     a=a||1; b=b||false; c=c||"" ;d={};
    3 }
    4 function test(a=1){
    5     a;
    6 }

    6.rest&spread 函数自动匹配参数

    rest表述性状态传递,感觉用语言不好概括,看下栗子吧。

     1 function fn(...re){
     2     console.log(re);
     3 }
     4 
     5 fn(1,2,3,4);//[1,2,3,4]
     6 
     7 
     8 function fn(normal,...re){
     9     console.log(re);
    10 }
    11 
    12 fn(1,2,3,4);//[2,3,4]

    spread能把数组展开

     1 function fn(...re){
     2     //这里 spread 就把一个数组展开了
     3     ott(...re);
     4 }
     5 
     6 fn(1,2,3,4);//10
     7 
     8 function ott(a,b,c,d){
     9     console.log(a+b+c+d);
    10 }

    7.模板字符串

    模板字符串是一种新的用来拼接字符串的方式,只是用来拼接字符串。

    let firstname = 'lao',lastname = 'wang';
    
    let str = `my mane is ${firstname} ${lastname}`;
    
    console.log(str);// my name is lao wang

    8.类

    用法 class ClassName{ constructor(){ //当我们在实例化一个对象的时候,首先会执行这个构造函数,这意味 //着,刚你在 new 一个类的时候,你可以在 constructor 里面做 //一些初始化的事情 } }

     1 class Animal {
     2     constructor(a,b,c){
     3         this.a = a;
     4         this.b = b;
     5         this.c = c;
     6     }
     7 
     8     move(){
     9         console.log('i can move');
    10     }
    11 }
    12 
    13 //实例化一个类
    14 let dog = new Animal(1,2,3);
    15 
    16 console.log(dog.a,dog.b,dog.c);// 1 2 3 
    17 
    18 class Human extends Animal{
    19     constructor(age){
    20 
    21 //super 的意思是它会执行一个父类的构造函数,然后你可以在这里
    22 //面给父类的构造函数赋值。你可以给它三个参数,你也可以什么都不
    23 //给,但是你要执行一下 super 这个函数让父类的构造函数执行一下
    24 //就可以了
    25 
    26         super(1,2,3);
    27         this.age= age;
    28     }
    29 
    30     //你可以覆盖掉父类的方法
    31     move(){
    32         console.log('i can run');
    33     }
    34 }
    35 
    36 let jim = new Human('18');
    37 console.log(jim.age);//18
    38 console.log(jim.a);//1
    39 jim.move();// i can run

    jim:

    9.模块化

    js 模块化,类似于后台的借口

    a.js

    1 //import 后面的这个变量是用来接受你导入的模块的默认导出值的,你可以自定义不同的名字,花括号就是用来拿到 export 里面导出的内容的,花括号里面名字必须和 export 里面的名字一样
    2 import fnnn,{fn1,fn2} from './b.js';
    3 
    4 fnnn()//fn
    5 fn1();//fn1
    6 fn2();//fn2

    b.js

    function fn1(){
        consolo.log('fn1');
    }`
    
    function fn2(){
        console.log('fn2');
    }
    
    //export 这是 ES6 的模块化规范里面用来暴露出口的关键字
    export {
        fn1,
        fn2
    }
    
    export default function fn(){
        console.log('fn');
    }

     commonJS 的模块化规范

    a.js

    1 const fnnn = require('./b.js');
    2 
    3 fnnn.fn1();//fn1
    4 fnnn.fn2();//fn2

    b.js

    function fn1(){
        consolo.log('fn1');
    }`
    
    function fn2(){
        console.log('fn2');
    }
    
    module.exports = {
        fn1,
        fn2
    }
  • 相关阅读:
    初探Remoting双向通信(三)
    MySQL主从复制
    MySQL锁机制
    mySql索引
    连接池
    JDBC
    数据库建表、约束、索引
    Oracle和SQL简介
    Stream API 和 注解
    lambda表达式
  • 原文地址:https://www.cnblogs.com/zwcai/p/8081202.html
Copyright © 2011-2022 走看看