数据类型与运算符

一、数据类型与运算符

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 nullundefined —— 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 的 Noneundefined 在 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 ifJS 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 && } 就靠这个特性条件渲染。英文术语:truthy/falsy、short-circuit(短路求值)。

Q6:核心速记主线有哪些?

  • 六基本类型:string/number/boolean/null/undefined/Symbol

  • 两空值:null 主动空、undefined 默认空(Python 无对应)

  • 比较:永远用 = 会偷偷做类型转换

  • 真值:空数组/空对象在 if 里算真;&& || 短路返回操作数

口诀

A:六类型先认清,null undefined 两空分;

typeof 查类型藏 bug,null 错被当 object 身;

比较永远用 = 偷转类型会骗人;

空数组空对象算真,&& || 短路返回本身。

相关链接