1. 变量定义
const:定义常量,值不可更改。let:定义变量,值可以更改。var:旧的变量定义方式,不推荐使用,因为它存在作用域提升等问题。
const x = 1; // 常量
let y = 5; // 变量
y = 10; // 可重新赋值
2. 数组操作
push:向数组末尾添加元素。forEach:遍历数组,对每个元素执行指定函数。map:对数组中的每个元素执行函数,并返回新数组。concat:创建一个新数组,包含原数组和新元素(保持原数组不变)。
const arr = [1, 2, 3];
arr.push(4); // [1, 2, 3, 4]
arr.forEach(item => console.log(item)); // 输出每个元素
const newArr = arr.map(item => item * 2); // [2, 4, 6, 8]
const combinedArr = arr.concat(5); // [1, 2, 3, 4, 5]
3. 对象操作
- 对象通过
{}定义,属性值可以是任意类型。 - 属性访问方式:点符号(
.)或方括号([])。 - 对象可以动态添加属性。
const obj = { name: 'Kimi', age: 25 };
console.log(obj.name); // Kimi
obj.address = 'Moonshot'; // 添加新属性
4. 函数定义
- 箭头函数:简洁的函数定义方式,适合简单操作。
- 函数声明:传统方式,适合复杂逻辑。
- 箭头函数不绑定自己的
this,适合用作普通函数,但不适合用作构造函数。
const add = (a, b) => a + b; // 箭头函数
function multiply(a, b) { return a * b; } // 函数声明
难点解析
1. 变量提升
var定义的变量会提升到函数或全局作用域顶部,但赋值不会提升。let和const不会提升,访问未声明的变量会报错。
console.log(x); // undefined(var 提升)
var x = 1;
console.log(y); // ReferenceError(let 不提升)
let y = 2;
2. 数组的不可变性
- 在函数式编程中,推荐使用不可变数据结构,避免直接修改原数组。
- 使用
concat或map等方法可以创建新数组,而不是直接修改原数组。
const arr = [1, 2, 3];
const newArr = arr.concat(4); // 新数组 [1, 2, 3, 4]
3. 对象的动态属性
- 对象的属性名可以是动态的,通过方括号语法访问或设置。
const key = 'age';
const obj = { [key]: 25 }; // { age: 25 }
console.log(obj[key]); // 25
4. 箭头函数的 this
- 箭头函数不绑定自己的
this,它会从外层作用域继承this。 - 如果需要使用
this,建议使用传统函数声明。
const obj = {
name: 'Kimi',
greet: () => {
console.log(this.name); // undefined(箭头函数继承外层 this)
}
};
obj.greet();
总结
掌握变量的定义方式、数组和对象的操作以及函数的使用是基础,而理解变量提升、不可变性以及箭头函数的特性则是进阶的关键。