3 min read

你不知道的JavaScript:入门篇

Table of Contents

简介

《Up & Going》是 YDKJS 系列的入门书,适合 JavaScript 新手或想巩固基础的开发者。


核心知识点

1. 变量与类型

JavaScript 有以下基本类型:

// 基本类型 (Primitive)
typeof "hello"     // "string"
typeof 42         // "number"
typeof true       // "boolean"
typeof undefined  // "undefined"
typeof null       // "object" (历史遗留 bug)
typeof Symbol()   // "symbol"

// 引用类型
typeof {}         // "object"
typeof []         // "object"
typeof function() {} // "function"

重要概念:

  • 基本类型按值传递,引用类型按引用传递
  • nulltypeof 返回 "object" 是 JS 的一个 bug

2. 值与引用

// 基本类型 - 赋值是值拷贝
let a = 2;
let b = a;  // b 是 2 的副本
b = 3;
console.log(a); // 2,不变

// 引用类型 - 赋值是引用拷贝
let obj1 = { name: "Lily" };
let obj2 = obj1;  // obj2 指向同一个对象
obj2.name = "Rose";
console.log(obj1.name); // "Rose",原对象也被修改

3. 运算符

// 相等性比较
"42" == 42   // true (宽松相等,类型转换)
"42" === 42 // false (严格相等,不类型转换)

// 建议:始终使用 === 严格相等

// 三元运算符
let status = age >= 18 ? "adult" : "minor";

// 逻辑运算符
let result = a && b;  // a 为真则返回 b,否则返回 a
let result = a || b;  // a 为真则返回 a,否则返回 b

4. 流程控制

// if else
if (condition) {
  // ...
} else if (condition2) {
  // ...
} else {
  // ...
}

// switch
switch (value) {
  case 1:
    // ...
    break;
  case 2:
    // ...
    break;
  default:
    // ...
}

// 三元运算符适合简单判断
let type = score >= 60 ? "pass" : "fail";

5. 循环

// for 循环
for (let i = 0; i < 5; i++) {
  console.log(i);
}

// for...of (遍历数组/可迭代对象)
for (let item of items) {
  console.log(item);
}

// for...in (遍历对象属性)
for (let key in obj) {
  console.log(key, obj[key]);
}

// while 循环
while (condition) {
  // ...
}

6. 函数

// 函数声明
function greet(name) {
  return "Hello, " + name;
}

// 函数表达式
const greet = function(name) {
  return "Hello, " + name;
};

// 箭头函数
const greet = (name) => "Hello, " + name;
const add = (a, b) => a + b;

// 默认参数
function greet(name = "World") {
  return "Hello, " + name;
}

作用域

什么是作用域?

作用域决定了变量的可见性和生命周期。

function outer() {
  let outerVar = "外层";
  
  function inner() {
    let innerVar = "内层";
    console.log(outerVar); // 可以访问外层
  }
  
  inner();
  // console.log(innerVar); // 错误!无法访问内层变量
}

块级作用域

// let 块级作用域
if (true) {
  let blockVar = "块内";
}
// console.log(blockVar); // ReferenceError

// var 函数作用域
if (true) {
  var functionVar = "函数级别";
}
console.log(functionVar); // "函数级别" - var 没有块级作用域

小结

  • ✅ 理解基本类型和引用类型的区别
  • ✅ 始终使用 === 严格相等
  • ✅ 优先使用 letconst,避免使用 var
  • ✅ 掌握函数和箭头函数的用法

相关阅读: