8JavaScript: The Good Parts

方法

标准方法库

Array方法Function方法Number方法String方法

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第8章:方法(Methods)

一、导读

1.1 本章学习目标

第8章讲解 JavaScript 的标准方法。理解内置方法的行为和陷阱是编写可靠代码的基础。

1.2 为什么第八章如此重要

JavaScript 的内置方法有很多不直观的行为。理解这些方法才能真正使用它们。

1.3 核心问题引导

Array 方法有哪些陷阱?

Function 的 call/apply/bind 有什么区别?

String 方法如何处理 Unicode?

Number 方法有哪些注意事项?


二、核心概念详解

8.1 Array 方法

javascript
// 注意:sort 默认按字符串排序
[10, 2, 30].sort();  // [10, 2, 30](不是 [2, 10, 30])
[10, 2, 30].sort((a, b) => a - b);  // [2, 10, 30]

// splice vs slice
var a = [1, 2, 3, 4, 5];
a.splice(1, 2);     // [2, 3](修改原数组)
a;                  // [1, 4, 5]
a.slice(1, 3);      // [4, 5](不修改原数组)

// forEach 不能 break
a.forEach(function(item) {
    if (item === 3) return;  // 只是跳过当前迭代
    // 不能 break
});

// 使用 for...of 可以 break
for (var item of a) {
    if (item === 3) break;
}

8.2 Function 方法

javascript
function greet(greeting, punctuation) {
    return greeting + ", " + this.name + punctuation;
}

var person = {name: "Alice"};

// call:逐个传参
greet.call(person, "Hello", "!");  // "Hello, Alice!"

// apply:数组传参
greet.apply(person, ["Hi", "!!"]);  // "Hi, Alice!!"

// bind:返回新函数
var boundGreet = greet.bind(person);
boundGreet("Hey", "...");  // "Hey, Alice..."

8.3 String 方法

javascript
var s = "Hello, World!";

s.charAt(0);       // "H"
s.charCodeAt(0);   // 72
s.indexOf("World"); // 7
s.slice(0, 5);     // "Hello"
s.substring(0, 5); // "Hello"
s.toUpperCase();   // "HELLO, WORLD!"
s.trim();          // 去除两端空白
s.replace("World", "JS");  // "Hello, JS!"
s.split(", ");     // ["Hello", "World!"]
s.match(/World/);  // ["World"]
s.search(/World/); // 7

三、实战案例

8.1 安全的数组操作

javascript
// 安全的数组删除
function removeAt(arr, index) {
    if (index < 0 || index >= arr.length) return arr;
    return arr.slice(0, index).concat(arr.slice(index + 1));
}

// 安全的数组查找
function findIndex(arr, predicate) {
    for (var i = 0; i < arr.length; i++) {
        if (predicate(arr[i], i, arr)) return i;
    }
    return -1;
}

四、本章小结

理解 JavaScript 内置方法的行为和陷阱。注意 sort 的默认排序、splice 和 slice 的区别、forEach 不能 break。


五、思考与练习

sort 的默认排序有什么问题?

splice 和 slice 有什么区别?

call/apply/bind 如何选择?

forEach 为什么不能 break?

如何处理 Unicode 字符?


8/9方法
0%