JavaScript 中的数据类型可以分为基本类型和引用类型

基本类型

  1. 数字类型(number):表示数值,包括整数和浮点数。
  2. 字符串类型(string):表示文本字符串,可以包含任意字符。
  3. 布尔类型(boolean):表示 true 或 false。
  4. 空值类型(null):表示一个空值。
  5. 未定义类型(undefined):表示一个未定义的值。
  6. 符号类型(symbol):表示唯一的、不可变的值,用于对象属性的唯一标识符。

引用类型

  1. 对象类型(object):表示复杂的数据结构,可以包含多个属性和方法。
  2. 数组类型(array):是对象类型的一种特殊形式,用于存储和操作多个值的有序集合。
  3. 函数类型(function):也是对象类型的一种特殊形式,可以接收参数、执行代码块并返回结果。
  4. 日期类型(date):用于表示日期和时间的对象。
  5. 正则表达式类型(regexp):用于处理字符串的模式匹配。
  6. 错误类型(error):表示程序执行过程中的错误。

在 JavaScript 中,基本类型的值是存储在栈内存的变量中,而引用类型的值则是存储在堆内存中的对象,变量实际上是对象的引用。因此,对于引用类型的值,变量存储的是对象的地址,而不是对象本身。

Question 1

如何理解基本类型和引用类型,主要从变量类型(基本类型和引用类型)、声明、赋值、复制、存储几方面详细描述
  1. 变量类型:基本类型的变量直接存储值,而引用类型的变量存储的是对象的引用。
  2. 声明:声明基本类型变量时,使用 var、let 或 const 关键字,后跟变量名和初始值;声明引用类型变量时,只需使用 var、let 或 const 关键字和变量名,不需要为其分配初始值,初始值可以在后面赋值。
  3. 赋值:基本类型变量的赋值是将一个值复制到变量中,而引用类型变量的赋值是将一个对象的引用复制到变量中。
  4. 复制:当将一个基本类型变量复制到另一个变量时,会创建一个新的变量,它的值与原变量相同;而当将一个引用类型变量复制到另一个变量时,只是复制了对象的引用,两个变量都指向同一个对象。
  5. 存储:基本类型变量的值存储在栈内存中,引用类型变量存储在堆内存中,变量名存储在栈内存中,变量名指向对象在堆内存中的地址。

    例如,声明一个基本类型变量:

    var num = 10;
    

    此时,变量 num 存储的是数字 10 的值,它的值直接存储在栈内存中。

    而声明一个引用类型变量:

    var obj = {name: 'John', age: 30};
    

    此时,变量 obj 存储的是对象在堆内存中的地址,它的值存储在堆内存中。当我们使用 obj 访问对象属性时,实际上是通过引用访问对象属性的。如果将 obj 赋值给另一个变量 newObj,那么 newObj 也会指向同一个对象,它们共享同一块堆内存空间。

总之,基本类型和引用类型在变量类型、声明、赋值、复制和存储等方面存在差异,开发者应该根据具体的应用场景,合理地选择使用基本类型或引用类型。

Question 2

null和 undefined的区别

在JavaScript中,null和undefined是两个特殊的原始值,它们都表示“无”,但在某些情况下它们有一些细微的差别。

首先,undefined表示一个未定义的值,通常是因为变量已经声明但没有被初始化赋值,或者对象没有定义某个属性。例如:

let x;
console.log(x); // undefined

const obj = {};
console.log(obj.foo); // undefined

相反,null表示一个空的值,即使存在一个变量或属性,但其值为空。例如:

const x = null;
console.log(x); // null

const obj = {foo: null};
console.log(obj.foo); // null

另一个区别是,undefined是一个全局变量,它的值可以被重新赋值为其他值。而null不是一个变量,它只是一个关键字,表示一个空值。

undefined = 1;
console.log(undefined); // 1

null = 1; // TypeError: Cannot assign to read only property 'null' of object '#<Window>'

此外,在使用 == 运算符时,null 和 undefined 是相等的,但在使用 === 运算符时,它们是不相等的。原因是 == 运算符在比较两个值时会进行类型转换,而 === 运算符不会进行类型转换。例如:

console.log(null == undefined); // true
console.log(null === undefined); // false

总的来说,null 和 undefined 都表示空值,但在使用时需要注意它们的细微差别。通常情况下,我们建议在初始化变量或属性时使用 null,而在判断变量或属性是否未定义时使用 undefined。

G|Z|H回复 1 可获取电子书

本文由mdnice多平台发布


哼哼子
1 声望2 粉丝