返回

JavaScript 新旧习惯 对比

前端

JavaScript 旧习惯与新习惯的对比

作为一门历史悠久的编程语言,JavaScript 在不断的发展演变中,语言特性和语法规则也经历了不断的变化和改进。随着新版本 JavaScript 的发布,一些旧的习惯和用法逐渐被新的语法和特性所取代。为了帮助开发者更好地理解和使用 JavaScript,本文将对比 JavaScript 中的旧习惯和新习惯,涵盖了对象创建、运算符、赋值、函数、类、箭头函数、展开运算符和解构赋值等方面,为开发者提供了有价值的参考和指导。

对象创建

旧习惯:
之前,如果属性名是个变量或者需要动态计算,则只能通过 对象.[变量名] 的方式去访问,且只能运行时才知道属性名是什么。

// 创建一个对象
const person = {
  name: 'John Doe',
  age: 30
};

// 访问对象的属性
console.log(person.name); // 输出: John Doe
console.log(person.age); // 输出: 30

新习惯:

ES6 中,可以使用计算属性名来创建对象。计算属性名允许使用变量或表达式作为属性名。

// 创建一个对象
const person = {
  ['first-name']: 'John',
  ['last-name']: 'Doe',
  age: 30
};

// 访问对象的属性
console.log(person['first-name']); // 输出: John
console.log(person['last-name']); // 输出: Doe
console.log(person.age); // 输出: 30

在新的语法中,我们可以将属性名动态地计算出来,从而使代码更具灵活性。

运算符

旧习惯:

在 JavaScript 中,+ 运算符主要用于数字的加法运算。

// 数字加法
const result = 1 + 2; // 输出: 3

新习惯:

ES6 中,+ 运算符还可以用于字符串的连接。

// 字符串连接
const result = 'Hello' + 'World'; // 输出: HelloWorld

此外,+ 运算符还可以用于对象的拼接。

// 对象拼接
const person1 = { name: 'John', age: 30 };
const person2 = { name: 'Jane', age: 25 };
const mergedPerson = { ...person1, ...person2 };
// 输出: { name: 'John', age: 30, name: 'Jane', age: 25 }

赋值

旧习惯:

在 JavaScript 中,可以使用 = 运算符来给变量赋值。

// 给变量赋值
let name = 'John Doe';

新习惯:

ES6 中,可以使用 constlet 来声明变量。const 关键字声明的变量是常量,一旦赋值后就不能再改变。let 关键字声明的变量是可变的,可以随时重新赋值。

// 使用 const 声明常量
const name = 'John Doe';

// 使用 let 声明变量
let age = 30;

// 重新给变量赋值
age = 31;

函数

旧习惯:

在 JavaScript 中,可以使用 function 关键字来定义函数。

// 定义一个函数
function greet(name) {
  console.log(`Hello, ${name}!`);
}

// 调用函数
greet('John Doe'); // 输出: Hello, John Doe!

新习惯:

ES6 中,可以使用箭头函数来定义函数。箭头函数是一种更简洁的函数写法,不需要使用 function 关键字。

// 定义一个箭头函数
const greet = (name) => {
  console.log(`Hello, ${name}!`);
};

// 调用函数
greet('John Doe'); // 输出: Hello, John Doe!

旧习惯:

在 JavaScript 中,可以使用 class 关键字来定义类。

// 定义一个类
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// 创建类的实例
const person = new Person('John Doe', 30);

// 调用类的方法
person.greet(); // 输出: Hello, my name is John Doe and I am 30 years old.

新习惯:

ES6 中,可以使用 class 关键字和 extends 关键字来定义子类。子类继承了父类的属性和方法,并可以扩展父类的方法。

// 定义父类
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// 定义子类
class Student extends Person {
  constructor(name, age, major) {
    super(name, age);
    this.major = major;
  }

  study() {
    console.log(`I am studying ${this.major}.`);
  }
}

// 创建子类的实例
const student = new Student('John Doe', 30, 'Computer Science');

// 调用父类的方法
student.greet(); // 输出: Hello, my name is John Doe and I am 30 years old.

// 调用子类的方法
student.study(); // 输出: I am studying Computer Science.

箭头函数

旧习惯:

在 JavaScript 中,可以使用匿名函数作为回调函数。

// 定义一个回调函数
const callback = function(name) {
  console.log(`Hello, ${name}!`);
};

// 将回调函数传递给另一个函数
setTimeout(callback, 1000, 'John Doe'); // 输出: Hello, John Doe!

新习惯:

ES6 中,可以使用箭头函数作为回调函数。箭头函数是一种更简洁的函数写法,不需要使用 function 关键字。

// 定义一个箭头函数
const callback = (name) => {
  console.log(`Hello, ${name}!`);
};

// 将箭头函数传递给另一个函数
setTimeout(callback, 1000, 'John Doe'); // 输出: Hello, John Doe!

展开运算符

旧习惯:

在 JavaScript 中,可以使用 apply() 方法来将数组元素传递给函数。

// 定义一个函数
const sum = function(a, b, c) {
  return a + b + c;
};

// 将数组元素传递给函数
const numbers = [1, 2, 3];
const result = sum.apply(null, numbers); // 输出: 6

新习惯:

ES6 中,可以使用展开运算符 (...) 来将数组元素传递给函数。展开运算符可以将数组元素展开为函数的参数。

// 定义一个函数
const sum = function(...numbers) {
  return numbers.reduce((a, b) => a + b);
};

// 将数组元素传递给函数
const numbers = [1, 2, 3];
const result = sum(...numbers); // 输出: 6

解构赋值

旧习惯:

在 JavaScript 中,可以使用 [] 来访问数组的元素。

// 定义一个数组
const numbers = [1, 2, 3];

// 访问数组的元素
const firstNumber = numbers[0];
const secondNumber = numbers[1];
const thirdNumber = numbers[2];

新习惯:

ES6 中,可以使用解构赋值来访问数组的元素。解构赋值是一种更简洁的语法,可以将数组元素直接赋值给变量。

// 定义一个数组
const numbers = [1, 2, 3];

// 解构赋值
const [firstNumber, secondNumber, thirdNumber] = numbers;

总结

随着 JavaScript 的不断发展,新的语法特性和最佳实践不断涌现。本文对比了 JavaScript 中的旧习惯和新习惯,涵盖了对象创建、运算符、赋值、函数、类