前言
在 JavaScript 中,、 和 是三种不同的操作符,用途和含义完全不同。面试过程中常涉及这些基础知识点,需明确其用法与区别。
JavaScript 赋值操作符 = 用于变量赋值;相等操作符 == 为宽松相等,会进行隐式类型转换;严格相等操作符 === 则比较类型和值且不做转换。开发中推荐始终使用 === 以避免类型转换带来的意外行为,仅在特定场景下考虑其他比较方式。本文涵盖三者区别、开发建议及常见面试题解析。

在 JavaScript 中,、 和 是三种不同的操作符,用途和含义完全不同。面试过程中常涉及这些基础知识点,需明确其用法与区别。
======= (赋值操作符)let x = 10; // 将值 10 赋给变量 x
const name = "Alice"; // 将字符串 "Alice" 赋给常量 name
== (相等操作符,宽松相等)5 == "5" // true (字符串 "5" 转换为数字 5)
0 == false // true (false 转换为数字 0)
null == undefined // true
"" == 0 // true

=== (严格相等操作符)5 === "5" // false (类型不同:数字 vs 字符串)
0 === false // false (类型不同:数字 vs 布尔值)
null === undefined // false (类型不同)
"" === 0 // false (类型不同)
5 === 5 // true (类型和值都相同)

| 操作符 | 名称 | 是否类型转换 | 推荐使用场景 |
|---|---|---|---|
= | 赋值 | - | 给变量赋值 |
== | 宽松相等 | ✅ 会转换 | 一般不推荐使用 |
=== | 严格相等 | ❌ 不转换 | 推荐使用 |
=== 和 !==
== 的情况// 可能产生意外结果
"0" == false // true
[] == false // true
"\t" == 0 // true
NaN === NaN // false (特殊情况,使用 isNaN() 判断)
+0 === -0 // true
Object.is() // ES6 更精确的比较方法
最佳实践:在 JavaScript 中,除非有特殊原因,否则总是使用 === 进行相等比较,这可以减少错误并使代码意图更明确。
题目:请简述 =、== 和 === 在 JavaScript 中的主要区别。
题目:以下代码输出什么?为什么?
console.log(0 == false);
console.log(0 === false);
console.log("" == false);
console.log("" === false);
let a = 5;
let b = "5";
let c = 5;
console.log(a == b); // ?
console.log(a === b); // ?
console.log(a === c); // ?
console.log(null == undefined); // ?
console.log(null === undefined); // ?
const obj1 = {name: "John"};
const obj2 = {name: "John"};
const obj3 = obj1;
console.log(obj1 == obj2); // ?
console.log(obj1 === obj2); // ?
console.log(obj1 === obj3); // ?
console.log([] == false); // ?
console.log([] === false); // ?
console.log([1, 2] == "1,2"); // ?
console.log([1, 2] === "1,2"); // ?
console.log(NaN == NaN); // ?
console.log(NaN === NaN); // ?
console.log(0 == -0); // ?
console.log(0 === -0); // ?
console.log(Number("abc") == NaN); // ?
题目:不使用 ===,实现一个 strictEqual(a, b) 函数,要求:
=== 一致题目:找出以下代码中的问题并修复:
function validateAge(age) {
if (age == 18) {
return "刚刚成年";
} else if (age > 18) {
return "已成年";
} else {
return "未成年";
}
}
console.log(validateAge("18")); // 期望输出:"刚刚成年"
console.log(validateAge(18)); // 期望输出:"刚刚成年"
console.log(validateAge("17")); // 期望输出:"未成年"
题目:实现一个 deepEqual(obj1, obj2) 函数,要求:
题目:在以下场景中,应该使用 == 还是 ===?为什么?
null 或 undefined题目:以下代码有什么潜在问题?如何改进?
function processInput(input) {
if (input == null) {
return "输入为空";
}
if (input.id == undefined) {
return "缺少 ID";
}
if (input.value == 0) {
return "值为 0";
}
return "处理成功";
}
题目:解释 == 操作符的类型转换规则(抽象相等比较算法)的主要步骤。
题目:
console.log(Object.is(NaN, NaN)); // ?
console.log(Object.is(0, -0)); // ?
console.log(Object.is([], [])); // ?
// 与 === 的区别是什么?
题目:分析以下表达式的执行过程:
"5" + 3 == 53; // ?
"5" - 3 == 2; // ?
true + false == 1; // ?
[] + {} == "[object Object]"; // ?

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
暂无推荐文章,稍后可再来查看。
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online