目录
1. 声明变量: let 和 const(无变量提升,块级作用域,不可重复声明)
1. 声明变量: let 和 const(无变量提升,块级作用域,不可重复声明)
let 声明的变量可以被修改;const 声明的变量是常量,不可被修改。
let x = 10;
const PI = 3.14;
2. 箭头函数
更简洁,绑定了词法作用域的 this 值。不会创建自己的 this,而是继承了上下文中的 this , this 始终指向定义时所在的作用域。
// 传统函数定义
function add(a, b) {
return a + b;
}
// 箭头函数定义
const add = (a, b) => a + b;
// 词法作用域绑定
function Person() {
this.age = 0;
setInterval(() => {
this.age++; // this 指向 Person 对象
}, 1000);
}
// 隐式返回,可省略 return 关键字
const add = (a, b) => a + b;
// 适用于回调函数
const arr = [1, 2, 3];
const doubled = arr.map(num => num * 2);
3. 模板字符串`,${}
使用反引号 \` 和 ${} 来插入变量或表达式,使字符串拼接更简洁。
const name = 'Alice';
console.log(`Hello, ${name}!`);
4. 解构赋值
允许按照一定模式从数组或对象中提取值,然后赋值给变量。
const [x, y] = [1, 2];
const {name, age} = {name: 'Alice', age: 30};
5. 默认参数
函数参数可以指定默认值,当调用函数时没有传入对应参数时,使用默认值。
function greet(name = 'World') {
console.log(`Hello, ${name}!`);
}
6. 展开运算符
展开运算符(`...`)可以将数组或对象展开为独立的元素,或者将多个参数合并为数组。
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
const obj1 = {a: 1, b: 2};
const obj2 = {...obj1, c: 3};
7. 类和继承
ES6 引入了类(class)和继承的语法糖,更易于面向对象编程。
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Spot');
dog.speak(); // Spot barks.
8. Promise 对象
Promise 是一种用于异步编程的对象,用于表示一个异步操作的最终完成或失败及其结果值。
Promise 对象的特点:
状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。状态一旦改变,就不会再变,从 pending 到 fulfilled 或者从 pending 到 rejected。
状态转换:只能由 pending 转换为 fulfilled 或者 rejected,并且一旦状态确定就不可再改变。
结果值:状态变为 fulfilled 时,会传递一个结果值;状态变为 rejected 时,会传递一个拒绝原因(错误信息)。
const promise = new Promise((resolve, reject) => {
// 执行异步操作
setTimeout(() => {
// 异步操作成功,调用 resolve 并传递结果值
resolve('Success!');
// 异步操作失败,调用 reject 并传递拒绝原因
// reject('Error!');
}, 1000);
});
promise.then(
// 成功时执行的回调函数
result => {
console.log(result); // 'Success!'
},
// 失败时执行的回调函数
error => {
console.error(error); // 'Error!'
}
);