本文将介绍 JavaScript 的 8 种数据类型,结合代码对每种数据类型进行总结归纳。
最新的 ECMAScript 标准定义了 8 种数据类型:
1.七种基本数据类型:
2.以及对象(Object),即引用类型。包括 Object Array、Function 等。
1.基本类型
基本数据类型存储在栈中(栈区指内存里的栈内存),占用的内存较小,可以直接操作它们的值,而且是按值传递的,即一个变量的值是直接存储在变量中的,它们的比较也是按值进行的。
例如:有以下几个基本类型的变量:
var name = 'jozo';
var city = 'guangzhou';
var age = 22;
复制代码
那么它的存储结构如下图:
栈区包括了变量的标识符和变量的值。
2.引用类型
引用类型的对象存储于堆中,占用的内存较大,不能直接操作它们的值,而是需要通过引用来访问它们的属性和方法,它们的赋值和比较也是按引用进行的,即一个变量的值是一个指向实际对象的引用。
例如:有以下几个对象:
var person1 = {name:'jozo'};
var person2 = {name:'xiaom'};
var person3 = {name:'xiaoq'};
复制代码
则这三个对象的在内存中保存的情况如下图:
由于基本类型和引用类型的差异,它们在使用上也有所不同。当我们对基本类型进行赋值、传参和比较时,只是对它们的值进行操作,而不会影响其他变量的值。但是对于引用类型,如果我们将一个引用类型变量赋值给另一个变量,那么两个变量实际上是指向同一个对象的引用。这意味着,如果我们在其中一个变量上进行修改,另一个变量也会受到影响。
例如: 1.基本类型和引用类型在参数传递中的区别
let a = 10;
let obj = { value: 20 };
function change(x, y) {
x = 20;
y.value = 30;
}
change(a, obj);
console.log(a); // 输出 10
console.log(obj.value); // 输出 30
复制代码
解析:基本类型的参数传递是值传递,函数内部对参数的修改不会影响原变量的值,因为函数内部修改的是参数的副本。而引用类型的参数传递是引用传递,函数内部对参数的修改会影响原变量的值,因为函数内部修改的是参数指向的对象的属性值。
2.基本类型和引用类型在赋值中的区别
let a = 10;
let b = a;
a = 20;
console.log(b); // 输出 10
let obj1 = { value: 10 };
let obj2 = obj1;
obj1.value = 20;
console.log(obj2.value); // 输出 20
复制代码
解析:基本类型的赋值是将变量的值复制一份给新变量,修改其中一个变量的值不会影响另一个变量的值。而引用类型的赋值是将变量的指针复制一份给新变量,两个变量指向同一个对象,修改其中一个变量指向的对象的属性值会影响另一个变量指向的对象。
3.基本类型和引用类型的相等比较
console.log(10 === 10); // 输出 true
console.log({} === {}); // 输出 false
let obj1 = { value: 10 };
let obj2 = obj1;
console.log(obj1 === obj2); // 输出 true
复制代码
解析:基本类型的相等比较是值比较,只有两个变量的值完全相同才相等。而引用类型的相等比较是指针比较,只有两个变量指向同一个对象才相等。
4.基本类型和引用类型的类型判断
console.log(typeof 10); // 输出 "number"
console.log(typeof {}); // 输出 "object"
let obj = { value: 10 };
console.log(obj instanceof Object); // 输出 true
复制代码
解析:使用 typeof 运算符可以判断基本类型的类型,使用 instanceof 运算符可以判断引用类型的类型。因为引用类型的类型是 Object,所以 instanceof Object 运算符可以用来判断一个变量是否为引用类型。
大厂面试题分享 面试题库
地址:前端面试题库 web前端面试题库 VS java后端面试题库大全