javascript数据类型有哪些_原始类型和引用类型有何不同?

10次阅读

javaScript数据类型分原始类型和引用类型:原始类型共7种(StringnumberBooleanNULLundefinedsymbol、bigint),按值传递;引用类型如ObjectArray等,变量存储内存地址,按引用传递

javascript数据类型有哪些_原始类型和引用类型有何不同?

javascript 数据类型分两类:原始类型(primitive)和引用类型(object)。区别不在“是不是对象”,而在值的存储方式和赋值/比较行为——原始类型按值传递,引用类型按内存地址传递。

原始类型有哪些?注意 nullundefined 的特殊性

共 7 种原始类型:stringnumberbooleannullundefinedsymbolbigint

  • typeof null 返回 "object",这是历史遗留 bug,但 null 本质是原始类型
  • undefined 是未赋值或未声明变量的默认值;null 是开发者显式赋的“空值”
  • Symbol() 每次调用都生成唯一值,常用于对象属性名防冲突
  • BigInt 用后缀 n 表示,如 123n,不能和 number 混算(123n + 1 报错)

引用类型有哪些?Arrayfunctiondate 都是 Object 的实例

所有非原始类型的值都是引用类型,底层都继承Object。常见包括:

它们共性是:变量存储的是指向内存中实际数据的引用(指针),不是数据本身。

立即学习Java免费学习笔记(深入)”;

赋值和比较时行为差异最直观:看 === 和修改影响

原始类型比较值,引用类型比较地址——哪怕内容一模一样,两个 {} 也不相等。

let a = 42; let b = a; b = 99; console.log(a); // 42 —— 原始类型赋值是拷贝值  let x = { name: "Alice" }; let y = x; // y 和 x 指向同一块内存 y.name = "Bob"; console.log(x.name); // "Bob" —— 修改 y 影响了 x  console.log({} === {}); // false console.log([] === []); // false console.log(/a/ === /a/); // false
  • 想深拷贝对象,不能只用 jsON.parse(json.stringify(obj)),它会丢掉 functionundefinedSymbol循环引用
  • Object.is(a, b)=== 更严格,能区分 +0-0,且 Object.is(NaN, NaN) 返回 true

检测类型别只信 typeof:用 instanceofObject.prototype.toString.call()

typeof 对大部分引用类型都返回 "object",无法区分 ArrayDatenull 等。

console.log(typeof []);      // "object" console.log(typeof null);    // "object" console.log(typeof new Date()); // "object"  // 更可靠的方式: console.log(Object.prototype.toString.call([]));     // "[object Array]" console.log(Object.prototype.toString.call(null));   // "[object Null]" console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"  // 或用 instanceof(注意跨 iframe 会失效) [] instanceof Array; // true
  • Array.isArray() 是检测数组的推荐方式,比 instanceof 更健壮
  • typeof 只对函数准确返回 "function",其他引用类型都不可靠

原始 vs 引用的核心不是“能不能改变”,而是“变量里存的是什么”。一个 const obj = {} 不可重新赋值,但 obj.prop = 1 完全合法——因为 const 锁的是绑定,不是对象内容。这点最容易被忽略。

text=ZqhQzanResources