JavaScript的一些基础知识

25 阅读2分钟

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 定义的变量会提升到函数或全局作用域顶部,但赋值不会提升。
  • letconst 不会提升,访问未声明的变量会报错。
console.log(x); // undefined(var 提升)
var x = 1;

console.log(y); // ReferenceError(let 不提升)
let y = 2;

2. 数组的不可变性

  • 在函数式编程中,推荐使用不可变数据结构,避免直接修改原数组。
  • 使用 concatmap 等方法可以创建新数组,而不是直接修改原数组。
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();

总结

掌握变量的定义方式、数组和对象的操作以及函数的使用是基础,而理解变量提升、不可变性以及箭头函数的特性则是进阶的关键。