话本小说网 > 游戏同人小说 > 原神第二课堂:胡桃讲编程之JS
本书标签: 游戏同人 

第 51 节:实战!互换内容

原神第二课堂:胡桃讲编程之JS

各位往生堂的小弟子、MC 红石建筑师们,欢迎继续实战!上一节我们搞定了零误差找零计算,本节进入变量互换实战:避开直接赋值覆盖、算术运算翻车的坑,写出带参数校验、异常防护的安全变量互换函数。

一、实战目标

破解变量互换直接覆盖、运算失效的经典 bug

掌握通用、安全的变量互换写法

用 throw 做参数校验,用 try/catch 捕获异常

支持数字、字符串等常用类型安全互换

二、双世界观类比

往生堂类比

变量互换就像往生堂交换两份卷宗的内容,直接赋值互换,相当于把第一份卷宗直接覆盖成第二份,原文内容彻底丢失;临时变量 / 解构赋值,就像用临时置物台暂存一份,再平稳交换,内容丝毫不乱。参数校验就像查验卷宗是否存在,未登记、无效的卷宗直接抛出异常,拒绝交换。

我的世界类比

变量互换如同两个储物箱交换物品,直接倒换会导致物品覆盖、丢失,机器彻底失灵;借助临时中转箱交换,才能完整互换、不丢物品。参数校验就像检测箱子是否有效,无效箱子直接切断流程,抛出异常阻止错误交换。

三、经典踩坑回顾(必看)

踩坑 1:直接赋值覆盖(最常见)

javascript

运行

let a = 5;

let b = 10;

// 错误互换,直接覆盖

a = b;

b = a;

console.log(a, b); // 10 10,内容全丢

踩坑 2:算术运算互换(仅限数字、易翻车)

javascript

运行

let a = 2.1;

let b = 1.1;

// 浮点数精度丢失,互换结果错乱

a = a + b;

b = a - b;

a = a - b;

非数字、浮点数用此法,直接出现 NaN、精度错误,完全失效。

四、正确变量互换方案(两种通用)

方案 1:临时变量法(兼容所有环境、最稳妥)

借助临时变量暂存值,逻辑清晰,支持所有数据类型。

javascript

运行

let a = 5;

let b = 10;

let temp = a; // 临时暂存

a = b;

b = temp;

方案 2:ES6 解构赋值(简洁优雅、现代首选)

一行代码完成互换,无需临时变量,可读性极高。

javascript

运行

let a = 5;

let b = 10;

[a, b] = [b, a];

五、实战升级:加校验 + 主动抛异常

结合第 48 节 throw,对互换变量做严格校验:变量未定义 → 抛异常变量为 null / 非法空值 → 抛异常合法变量 → 安全互换

javascript

运行

"use strict";

/**

* 安全变量互换函数

* @param {*} a - 待互换变量1

* @param {*} b - 待互换变量2

* @returns {Array} 互换后的 [a, b]

* @throws 变量未定义、非法值时抛异常

*/

function swapSafe(a, b) {

// 校验1:变量必须已定义,不能是 undefined

if (a === undefined || b === undefined) {

throw new Error("互换变量不能未定义");

}

// 校验2:排除 null 非法值

if (a === null || b === null) {

throw new Error("互换变量不能为null");

}

// 核心:解构赋值安全互换

[a, b] = [b, a];

return [a, b];

}

六、完整调用:捕获异常 + 真实互换

javascript

运行

"use strict";

// 测试正常互换

try {

// 数字互换

console.log(swapSafe(5, 10));

// 字符串互换

console.log(swapSafe("胡桃", "往生堂"));

// 测试未定义变量,触发异常

let x;

console.log(swapSafe(x, 10));

} catch (err) {

console.log("互换失败:", err.message);

}

七、多场景测试结果

数字 5 和 10 互换,得到 [10,5],正常完成字符串 "胡桃" 和 "往生堂" 互换,得到 ["往生堂","胡桃"],正常完成传入未定义变量,函数抛出异常并提示变量不能未定义传入 null 值,函数抛出异常并提示变量不能为 null

八、实战避坑要点

绝对不要直接连续赋值互换,会导致值完全覆盖丢失

禁止用算术运算做通用互换,仅数字可用且存在精度风险

日常开发优先用解构赋值,兼容老环境用临时变量法

互换函数必须加参数校验,用 throw 拦截未定义、null 等非法值

调用带抛错的互换函数,必须套 try/catch,避免程序中断

九、本节实战总结

掌握变量互换的两种通用正确写法,彻底告别覆盖丢失 bug

理解临时变量与解构赋值的适用场景

把异常校验用到变量操作场景,提升代码健壮性

写出简洁、安全、可上线的变量互换工具函数

课后练习题

基础题

直接连续赋值互换变量会出现什么问题?

现代 JS 推荐的一行代码互换方式是什么?

互换前检测到未定义变量,用哪个关键字抛异常?

进阶题

基于本节代码,封装一个对象属性互换函数,同样加参数校验与异常抛出。

上一章 第 50 节:实战!找零时刻 原神第二课堂:胡桃讲编程之JS最新章节 下一章 第 52 节:实战!畜牧场