zoukankan      html  css  js  c++  java
  • ES6新语法(一)

    1.常量

            ES5没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量。

            常量必须给初始值; 常量不能在同一作用域内重新定义或赋值; 

    <script>
        const PI = 3.14;
        console.log(PI);
    </script>

    2.块级作用域

             JS中作用域有:全局作用域、函数作用域

             ES6中新增了块级作用域。

             块作用域由 { } 包括,if语句和for语句里面的{ }就属于块作用域。(不包括函数)

    //注意 块级作用域中,使用var声明的变量是全局变量
    {
        var a = 1;
        console.log(a);//1
    }
    console.log(a);//1
    
    if(true){
        var b = 2;
        console.log(b);//2
    }
    console.log(b);//2

    2.2、let关键字声明块级变量

               ES6中增加了let关键字声明变量,声明的变量只在当前代码块中生效(块级作用域)

             使用let声明的变量可以重新赋值,但是不能在同一作用域内重新声明

    <script>
          // let声明的变量可以重新赋值
        {
            let a = 1;
              console.log(a);
              a = 2;
             console.log(a);;
        }
    </script>
    
    <script>
      // let声明的变量不能在同一作用域重新声明,直接报错 预解析错误
      {
          let a = 1;
          console.log(a);
          let a = 2;
          console.log(a);
    }
    </script>

    2.3、let变量没有变量提升

    {
         console.log(i);//报错
        let i = 8;
    }

    2.4、应用:let块级变量解决i丢失的问题

    var arr = [3,4,5,6,7];
    
    for(let i=0; i<arr.length; i++){
        // (function(i){
            setTimeout(function(){
                console.log(i);
                //console.log(arr[i]);
            }, 1000);
        // })(i);
    }

    3.字符串模板(模板字面量)

                js中单双引号字符串,均不解析变量,需要使用+号将变量拼接在字符串中。 

             ES6中提供了字符串模板语法,允许使用反引号(倒引号) `` 来创建字符串,里面可以包含${变量名}形式的变量占位符。 其中的变量会被解析。

    //生成一个随机数
    var num=Math.random();
    
    //将这个数字输出到console
    console.log('your num is ' + num);
    console.log(`your num is ${num}`);
    
    var str = `hello
    欢迎来到黑马大讲堂`;
    console.log(str);

     4.函数     

    4.1 参数默认值

    //ES5中,只能变相实现参数默认值(函数内部加判断处理)
    function f1(username){
        //传统的指定默认参数的方式
        var username = username || 'zhangsan';
        console.log('Hello ' + username);
    }
    f1();//Hello zhangsan
    f1('lisi');//Hello lisi
    
    
    //ES6中,直接给形参设置默认值
    function f2(username='zhangsan'){
        console.log(`Hello ${username}`);
        //console.log('Hello ' + username);
    }
    
    f2();//Hello zhangsan
    f2('lisi');//Hello lisi

    4.2 展开运算符(拆包)

              ES6新增了展开运算符(用三个连续的点 (...) 表示),能够将数组和字符串字面量展开为多个元素

    //展开数组
    var arr = [1, 2, 3];
    console.log(arr); // [1, 2, 3]
    console.log(...arr); // 1 2 3
    //展开字符串
    var str = "hello";
    console.log(str);
    console.log(...str);

              应用:拓展参数   

            它允许传递数组或者类数组直接做为函数的参数。

    //函数本来接收三个单独的参数
    function f3(x,y,z){
        console.log(x,y,z);
    }
    
    //ES6中,我们可以将一个数组以拓展参数的形式传递,它能很好地映射到每个单独的参数
    var arr=[3,4,5];
    f3(...arr);//输出:3 4 5 
    
    //ES5中,如果需要传递数组当参数,我们需要使用函数的apply方法
    f3.apply(null,arr);//输出:3 4 5 

    4.3 不定参数(可变参数/剩余参数)

               不定参数是指,在函数中使用 命名参数 同时接收 不定数量 的 未命名参数,需要使用三个连续的点 (...) 。

             这是一种语法糖(在原语法上的简化用法),ES5通过函数内部的arguments对象来达到类似效果。

             不定参数的格式:

    //不定参数 将多个实参放在一个数组变量中
    //  ...x  三个点是固定格式,x是形参变量名
    function f1(...x){
        console.log(x);
    }
    f1(3,4,5); //[3,4,5]
    
    function f2(m, n, ...x){
          console.log(m, n, x);
    }
    f2(2,3,4,5,6); // m=2  n=3  x=[4,5,6]
  • 相关阅读:
    关于findViewById返回空指针的错误
    android客户端向服务器发送图片和文字,类似于发微博。能用json格式发送吗?
    nodejs 学习资料大全
    篇章三:[AngularJS] 使用AngularCSS動態載入CSS
    篇章二:[AngularJS] 使用AngularAMD動態載入Service
    篇章一:[AngularJS] 使用AngularAMD動態載入Controller
    Angular 资料大集合
    js-音乐播放器,播放|暂停|滑块的功能
    JS-以鼠标位置为中心的滑轮放大功能demo1
    使用 Electron 构建桌面应用(拖动控制篇)
  • 原文地址:https://www.cnblogs.com/shineguang/p/11235110.html
Copyright © 2011-2022 走看看