面试题答案
一键面试基本数据类型的存储机制
- 栈内存:在JavaScript中,基本数据类型(
Number
、String
、Boolean
、null
、undefined
、Symbol
从ES6开始)的值直接存储在栈内存中。栈内存是一种后进先出(LIFO)的数据结构,它为每个执行上下文分配一块内存空间。当一个函数被调用时,会为该函数创建一个新的执行上下文并压入栈中;函数执行完毕后,该执行上下文从栈中弹出。
对变量赋值的影响
- 直接赋值:当使用基本数据类型进行变量赋值时,会在栈内存中创建一个新的值,并将该值赋给变量。例如:
let num1 = 5;
let num2 = num1;
这里 num1
在栈内存中存储值 5
,当 let num2 = num1
执行时,会在栈内存中为 num2
单独创建一个值为 5
的空间,此时 num1
和 num2
虽然值相同,但在内存中是两个独立的存储单元。后续如果修改 num2
的值,不会影响 num1
。
num2 = 10;
console.log(num1); // 输出 5
console.log(num2); // 输出 10
对比较操作的影响
- 值比较:基本数据类型在进行比较操作时,比较的是它们在栈内存中存储的值。例如:
let str1 = 'hello';
let str2 = 'hello';
console.log(str1 === str2); // 输出 true
这里 str1
和 str2
虽然是两个不同的变量,但由于它们存储在栈内存中的值完全相同,所以 ===
比较(严格相等比较,既比较值又比较类型)结果为 true
。
let bool1 = true;
let bool2 = false;
console.log(bool1 === bool2); // 输出 false
由于 bool1
和 bool2
在栈内存中的值不同,所以比较结果为 false
。