Skip to content

ES6+ 一些零碎的改动

严格模式

此为 ES5 新增语法。

参考:https://www.runoob.com/js/js-strict.html

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

let 和 const

ES6 建议不再使用 var 定义变量,而是使用 let 定义变量,const 定义常量。

对于开发的影响:均使用 const,如果实在需要修改值再使用 let。

无论是使用 let 还是 const,它们均解决了长久以来变量定义的问题,使用它们定义变量,具有以下特点:

  • 全局定义的变量不再作为属性添加到全局对象中
  • 在变量定义之前使用它会报错
  • 不可重复定义同名变量
  • 使用 const 定义变量时必须初始化
  • 变量具有块级作用域,在代码块之外不可使用

注意,在 for 循环中使用 let 定义变量,变量所在的作用域是循环体,因此在循环外不能使用。另外,for 循环会对该变量做特殊处理,让每次循环使用的都是一个独立的循环变量,这可以解决 JS 由来已久的问题。

JavaScript
for (var i = 0; i < 13; i++) {
  setTimeout(function () {
    console.log(i);
  }, 1000);
}

// solution IIFE
for (var i = 0; i < 13; i++) {
  (function (i) {
    setTimeout(function () {
      console.log(i);
    }, 1000);
  })(i);
}

// solution let
for (let i = 0; i < 13; i++) {
  setTimeout(function () {
    console.log(i);
  }, 1000);
}

幂运算

ES7 新增语法,使用 ** 表示幂运算。

JavaScript
console.log(2 ** 3); // 8

字符串新增 API

API含义
String.prototype.includes()判断字符串是否包含某个子字符串
String.prototype.trim()去除字符串两端的空格
String.prototype.trimStart()去除字符串开头的空格
String.prototype.trimEnd()去除字符串结尾的空格
String.prototype.replaceAll(s,t)将字符串中所有 s 替换为 t
String.prototype.startsWith(s)判断字符串是否以 s 开头
String.prototype.endsWith(s)判断字符串是否以 s 结尾

提示

注意区别原型方法和静态方法,原型方法必须通过实例调用。

模板字符串

ES6 提供了一种新的字符串字面量的书写方式,即模板字符串,写法为:

JavaScript
`字符串内容`;

模板字符串可以轻松地实现换行和拼接:

JavaScript
const s = `hello
world`;
console.log(s);
// hello
// world

const name = '张三';
const age = 18;
const s2 = `姓名:${name},年龄:${age}`;
console.log(s2); // 姓名:张三,年龄:18

在需要换行的时候,模板字符串比普通字符串更优秀。

通常,我们可以用模板字符串拼接 HTML。

JavaScript
const s = `
  <div>
    <h1>${title}</h1>
    <p>${content}</p>
  </div>
`;