2.1 变量就是引用
在JavaScript中,变量其实是对对象的引用,而不是变量本身。这意味着,当你在JavaScript中创建一个变量时,你只是创建了一个指向内存中对象的引用。
这种语言特性对于变量的使用有着重要的影响,尤其是在将对象传递给函数或将它们赋值给其他变量时。
当你创建一个变量并赋值给它时,JavaScript会为该值在内存中分配一个对象,并使变量成为该对象的引用。如果你将一个变量赋值给另一个变量,新变量将引用与原始变量相同的对象。这意味着,若对象是可变的,通过一个变量所做的更改会反映到另一个变量上。
例子:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // 输出: [1, 2, 3, 4]
我们在变量b
中添加了数字4,但它也被添加到了变量a
的列表中,因为实际上两个变量只是指向列表对象[1, 2, 3]
的引用。
2.2 undefined类型
在JavaScript中,有两个特殊的数据类型:null
和undefined
。这两种类型由于其相似性常常让开发人员感到困惑,但它们有不同的用途,并在不同的情况下使用。让我们更详细地看看它们。
undefined类型
undefined
类型代表一个已声明但未经初始化的变量的值。当访问对象的不存在的属性或数组中不存在的元素时,也会返回此值。
例子
1. 未初始化的变量:
let x;
console.log(x); // undefined
2. 对象的不存在属性:
let obj = {};
console.log(obj.property); // undefined
3. 数组中不存在的元素:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. 缺少函数参数:
function myFunction(a, b) {
console.log(b); // undefined, 如果调用为 myFunction(1)
}
myFunction(1);
undefined的属性:
undefined
是数据类型和值typeof undefined
返回undefined
2.3 null类型
null
类型表示故意缺少的值。此值通常用于初始化将来将被赋予对象的变量,或者清空变量的值。
例子
1. 初始化变量:
let obj = null;
console.log(obj); // null
2. 清空变量的值:
let user = { name: "Alice" };
user = null; // user 现在不指向任何对象
null的属性:
null
是表示故意缺少值的值typeof null
返回object
,这是JavaScript中的一个已知错误(实际上null
不是对象)
2.4 null和undefined的对比
尽管null
和undefined
均可用于表示缺少的值,但它们在用途和使用场景上是有区别的。
属性 | null | undefined |
---|---|---|
类型 | 原始类型 | 原始类型 |
用途 | 故意缺少值 | 未初始化的变量 |
使用 | 初始化变量,清空值 | 不存在的属性,数组元素 |
默认值 | 无 | 是(对于未初始化的变量,函数参数) |
使用示例
1. 用对象或数组初始化变量:
let myObject = null;
let myArray = null;
2. 检查值:
let value;
if (value === undefined) {
console.log("变量未初始化。");
}
let result = null;
if (result === null) {
console.log("缺少值。");
}
3. 清空值:
let person = { name: "Alice" };
person = null; // 现在 person 不指向对象
4. 检查属性是否存在:
let obj = {};
if (obj.property === undefined) {
console.log("属性不存在。");
}
理解JavaScript中的null
和undefined
之间的区别对于正确管理值和防止代码错误是很重要的。
undefined
通常用于指不初始化的变量或缺少的属性,而null
用于明确表示缺少值。
正确使用这些特殊数据类型可以使代码更易读和可预测。
GO TO FULL VERSION