返回

用ES6写出优雅的代码

前端

ES6引入了一种新的变量声明方式:const和let。const声明的变量是只读的,let声明的变量是可以重新赋值的。这两种变量声明方式取代了var,var声明的变量是全局变量,可以在任何地方使用。

const

const声明的变量是只读的,这意味着不能重新给它赋值。const变量在声明时必须初始化,否则会报错。const变量不能被重复声明,否则也会报错。

const name = 'John Doe';
name = 'Jane Doe'; // 报错:TypeError: Assignment to constant variable.

let

let声明的变量是可以重新赋值的,这意味着可以多次给它赋值。let变量在声明时可以不初始化,但是如果声明时不初始化,则变量的值为undefined。let变量可以被重复声明,但是每次声明时必须重新初始化。

let name = 'John Doe';
name = 'Jane Doe'; // 正确:重新赋值

变量提升

var命令会发生“变量提升”现象,既变量可以在声明之前使用,值为undefined。个人认为,对声明的变量确定后面不会发生更改时,即使性能上没有太大提升差异在,但使用const,代码的可读性也会增强很多。 const 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。也就是说,const声明的变量不能指向另一个对象,但其属性的值是可以改动的。

console.log(name); // undefined
var name = 'John Doe';

let和const不会发生变量提升,所以在使用前必须先声明。

console.log(name); // ReferenceError: name is not defined
let name = 'John Doe';

块级作用域

let和const声明的变量都是块级作用域的,这意味着它们只在声明它们的块内有效。块级作用域可以防止变量被意外修改。

{
  let name = 'John Doe';
  console.log(name); // John Doe
}

console.log(name); // ReferenceError: name is not defined

箭头函数

箭头函数是ES6引入的一种新的函数声明方式。箭头函数没有自己的this,并且不能使用arguments对象。箭头函数非常适合作为回调函数使用。

const add = (a, b) => a + b;

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((a, b) => a + b);

console.log(sum); // 15

模块

ES6引入了模块的概念。模块允许将代码组织成独立的文件,以便于管理和复用。模块可以使用import和export关键字来导入和导出变量、函数和类。

// module1.js
export const name = 'John Doe';

// module2.js
import { name } from './module1.js';

console.log(name); // John Doe

ES6引入了类(class)的概念。类是创建对象的蓝图,它可以包含属性和方法。类使用class关键字来声明,类的实例使用new关键字来创建。

class Person {
  constructor(name) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

const person = new Person('John Doe');
person.greet(); // Hello, my name is John Doe.

扩展运算符

扩展运算符(...)可以将数组或对象展开成一组参数或属性。扩展运算符非常适合用于函数调用和对象字面量。

const numbers = [1, 2, 3, 4, 5];
const sum = (...numbers) => numbers.reduce((a, b) => a + b);

console.log(sum(1, 2, 3, 4, 5)); // 15

const person = {
  name: 'John Doe',
  age: 30
};

const newPerson = {
  ...person,
  city: 'New York'
};

console.log(newPerson); // { name: 'John Doe', age: 30, city: 'New York' }

结论

ES6是一种非常强大的语言,它引入了许多新的特性,使代码更加优雅和易于维护。希望这篇文章能帮助您了解ES6的一些基本特性。