数据类型与运算符
一、数据类型与运算符
1.1 六种基本类型
let name = "张三"; // string:字符串(用 "" 或 '' 或 ``)
let age = 25; // number:数字(整数和小数不分,都是 number)
let isStudent = true; // boolean:布尔值,只有 true 和 false
let nothing = null; // null:主动赋空——"我故意让这里为空"
let notDefined = undefined; // undefined:声明了但没赋值——"这里还没东西"
let unique = Symbol("id"); // Symbol:唯一标识符(极少用到,先不管)
1.2 null 和 undefined —— JS 有两个空值
// null:你主动赋空——"我知道这里应该是空"
let user = null; // 表示"还没有用户数据"
let currentUser = getData(); // 函数返回 null 表示"没查到"
// undefined:系统默认的空——"声明了但没给值"
let x; // 声明但没赋值 → undefined
console.log(x); // undefined
// 对象访问不存在的属性 → undefined
let obj = { name: "张三" };
console.log(obj.age); // undefined —— 不报错!Python 会 KeyError
// 函数没写 return → 返回 undefined
function fn() {
let a = 1; // 没有 return
}
console.log(fn()); // undefined
Python 对照:null ≈ Python 的 None。undefined 在 Python 里没有直接对应——如果你访问 dict 中不存在的 key,Python 直接抛 KeyError,JS 默默给你 undefined。
1.3 typeof —— 查看类型
typeof "hello"; // "string"
typeof 42; // "number"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" ← ⚠️ JS 的经典 Bug,记住就行
typeof {}; // "object"
typeof []; // "object" ← 数组也是 "object"
typeof function(){}; // "function"
1.4 === vs == —— 严格比较 vs 宽松比较
// === 严格相等:类型和值都要一样(永远用这个)
1 === 1; // true
1 === "1"; // false —— 类型不同
null === undefined; // false
// == 宽松相等:会偷偷转换类型(别用!)
1 == "1"; // true —— JS 把字符串 "1" 转成了数字 1
null == undefined; // true —— 这俩在 == 眼里一样
// ⚠️ 开发中统一用 ===
Python 对照:JS 的 === ≈ Python 的 ==。JS 的 == 带自动类型转换,Python 没有对应。
1.5 Truthy / Falsy —— 条件判断里的真假
以下值在 if 中被当成 false(falsy):
false → 假
0 和 -0 → 假(零)
"" 和 '' → 假(空字符串)
null → 假
undefined → 假
NaN → 假(Not a Number)
除此之外,所有值在 if 中都是 true,特别注意:
if ([]) console.log("空数组是真!"); // 会执行!
if ({}) console.log("空对象是真!"); // 会执行!
if ("0") console.log("字符串'0'是真!"); // 会执行!
if (" ") console.log("空格字符串是真!"); // 会执行!
和 Python 的关键差异:
| 值 | Python if | JS if |
|---|---|---|
[] 空列表/空数组 | 假 | 真 ⚠️ |
{} 空字典/空对象 | 假 | 真 ⚠️ |
"" 空字符串 | 假 | 假 |
0 | 假 | 假 |
None / null | 假 | 假 |
1.6 逻辑运算符:&& / || / !
// JavaScript Python
// && and
// || or
// ! not
let a = true && false; // false — Python: a = True and False
let b = true || false; // true — Python: b = True or False
let c = !true; // false — Python: c = not True
// ⚠️ && 和 || 在 JS 里不只是返回 true/false——还会短路并返回操作数本身
let d = 0 || "hello"; // "hello" —— 0 是假,返回右边的值
let e = "hi" && "world"; // "world" —— 两个都是真,返回最后一个
// React 条件渲染就是利用了这个特性:
// {isAdmin && <AdminPanel />} → isAdmin 为真时返回 <AdminPanel />,否则返回 false
1.7 模板字符串
let name = "张三";
let age = 20;
// JS 模板字符串:用反引号 ``(键盘 Tab 上面那个键),${} 里放变量
let msg = `你好,${name}!你今年 ${age} 岁,明年 ${age + 1} 岁。`;
// ↑ ↑ ↑
// 反引号开始 ${变量} 插入值 可以做运算
console.log(msg); // "你好,张三!你今年 20 岁,明年 21 岁。"
// Python f-string 对照(写法不同,作用一样):
// msg = f"你好,{name}!你今年 {age} 岁,明年 {age + 1} 岁。"
速记卡(面试闪卡)
Q1:一句话讲清「数据类型与运算符」到底是什么?
A:JS 六种基本类型 + 两个空值:null 主动空、undefined 默认空;比较永远用 ===,if 判断里空数组空对象竟算真。
Q2:六种基本类型与 typeof —— 怎么理解? —— 怎么理解?
A:JS 有 string/number/boolean/null/undefined/Symbol 六种基本类型,像六种不同抽屉各装一类东西。typeof 是台标签机,但有个经典 bug:typeof null 竟返回 “object”(历史遗留,记住就行)。生活类比:你给每个抽屉贴标签,唯独”空抽屉”被错贴成”箱子”标签,查的时候别被误导。英文术语:primitive types(基本类型)、typeof。
Q3:null 与 undefined:两个空值 —— 怎么理解? —— 怎么理解?
A:JS 有两个”空”,最容易混。null 是你主动赋的空,像你亲手清空购物车,表示”我知道这里该空”;undefined 是系统默认的空,像页面加载时”暂无数据”占位。生活类比:null = 你故意把杯子倒空;undefined = 杯子本来就没接水。Python 里只有 None 对应 null,undefined 没有直接对应(访问不存在的 key Python 直接抛 KeyError,JS 默默给 undefined)。英文术语:null、undefined。
Q4:三等号与双等号:严格 vs 宽松比较 —— 怎么理解? —— 怎么理解?
A:= 像严格安检:类型和值都要一致(1 = “1” 是 false); 像放水通道,会偷偷把 "1" 转成数字 1 再比(1 “1” 是 true),还把 null 和 undefined 当成一样。生活类比: 是个"好人",总帮你圆场反而埋雷。开发里永远用 =,把 == 拉黑。英文术语:strict equality(严格相等)、type coercion(类型转换)。
Q5:Truthy/Falsy 与 && || 短路 —— 怎么理解? —— 怎么理解?
A:if 判断里只有 7 种值算假(false/0/""/null/undefined/NaN),其余皆真——尤其空数组 []、空对象 {} 在 JS 里竟是真(Python 里是假,注意差异)。&& 和 || 不只返回 true/false,还会短路返回操作数本身:0 || “hi” 返回 “hi”,“a” && “b” 返回 “b”。生活类比:React 的 {isAdmin &&
Q6:核心速记主线有哪些?
-
六基本类型:string/number/boolean/null/undefined/Symbol
-
两空值:null 主动空、undefined 默认空(Python 无对应)
-
比较:永远用 =, 会偷偷做类型转换
-
真值:空数组/空对象在 if 里算真;&& || 短路返回操作数
口诀
A:六类型先认清,null undefined 两空分;
typeof 查类型藏 bug,null 错被当 object 身;
比较永远用 =, 偷转类型会骗人;
空数组空对象算真,&& || 短路返回本身。
相关链接
-
📋 目录:00-JavaScript
-
📚 学习清单:八股文学习路线图