es6学习

45 阅读2分钟

1. let 和 const

1.1 let

用来声明变量,只在 let 命令所在的代码块内有效,即块级作用域。不存在变量提升,它所声明的变量一定要在声明后使用,不允许重复声明,否则报错。 举个例子:

        function varTest() {
              var a = 1;
              if (true) {
                var a = 2;
                console.log(a);  // 2
              }
              console.log(a);  // 2
        }
        function letTest() {
              console.log(b);   // ReferenceError: b is not defined
              let b = 1;
              if (true) {
                let b = 2;
                console.log(b);  // 2
              }
              console.log(b);  // 1
        }

1.2 const

const 声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const 一旦声明变量,就必须立即初始化,不能留到后面赋值。

const a;
//SyntaxError: Missing initializer in const declaration

const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。也不存在变量提升,不允许重复声明。

const 本质并不是保证变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。如果 const 后面的变量是普通变量,改变值报错。如果后面存储的是数组或者对象,那么改变它的指向也会报错,但是如果改变数组或者对象的值是不会发生错误的。

<script>
        const a = "123";
        a = "234";
        console.log(a);// TypeError: Assignment to constant variable.
        const  arr = [1,2,3];
        arr.push(4);
        console.log(arr);// [1,2,3,4]
        arr = [];
        console.log(arr);// 改变数组的指向会出错 Uncaught TypeError: Assignment to constant variable
    </script>

2.模板字符串

模板字符串(templatestring)是增强版的字符串,用反引号(`),标识,嵌入的变量名写在${}之中。

第一个用途,基本的字符串格式化。

//ES5
    var name = 'world'
    console.log('hello' + name)
//ES6
    var name = 'world'
    console.log(`hello ${name}`)

第二个用途,做多行字符串或者字符串一行行拼接。

 // ES5
    var a = "Hi \
    Girl!"
// ES6
    const say = `<div>
        <p>hello, world</p >
    </div>`

ES6 还提供了一些字符串方法,如下:

// 1.includes:判断是否包含参数字符串,返回布尔值
    const str = 'welcome'
    console.log(str.includes('e')) // true

// 2.repeat: 获取字符串重复n次
    const str = 'he'
    console.log(str.repeat(3)) // 'hehehe'
    //如果带入小数, Math.floor(num) 来处理
    // s.repeat(3.1) 或者 s.repeat(3.9) 都当做 s.repeat(3) 来处理

// 3. startsWith 和 endsWith 判断是否以给定文本开始或者结束
    const str =  'hello world!'
    console.log(str.