JS值类型与引用类型详解及`typeof`用法

需积分: 5 0 下载量 87 浏览量 更新于2024-08-04 收藏 9KB MD 举报
"题目+知识点+答题.md" 在JavaScript中,了解变量类型和操作符的用法对于编写高质量的代码至关重要。以下是对标题和描述中提及的一些关键知识点的详细解释: 1. **值类型和引用类型的区别** - **值类型**:包括`undefined`、`null`、`boolean`、`number`、`bigint`、`string`和`symbol`。这些类型的变量保存的是实际的数据值。当一个值类型变量赋值给另一个变量时,会创建该值的一个副本,两个变量之间互不影响。例如: ```javascript let a = 100; var b = a; a = 200; console.log(b); // 输出 100 ``` - **引用类型**:主要指的是对象类型,如`Object`、`Array`、`Function`等。引用类型的变量实际上存储的是一个指向内存中对象的引用,而不是对象本身。当一个引用类型变量赋值给另一个变量时,两个变量共享同一个内存空间。因此,改变其中一个变量会影响到另一个。例如: ```javascript let a = { age: 20 }; var b = a; b.age = 21; console.log(a.age); // 输出 21 ``` 2. **`typeof`运算符** - `typeof`用于检测变量的类型,它能够识别所有值类型,以及函数。但是,对于引用类型,它只能告诉我们是否是对象,而无法进一步区分是哪种类型的对象。例如: ```javascript typeof undefined; // 输出 "undefined" typeof "abc"; // 输出 "string" typeof 100; // 输出 "number" typeof true; // 输出 "boolean" typeof Symbol(); // 输出 "symbol" typeof console.log; // 输出 "function" typeof null; // 输出 "object"(这是一个历史遗留问题) ``` 3. **`===`与`==`比较运算符** - **`===`**(严格相等):不仅检查值是否相等,还检查类型是否相同。如果两者都相等,结果才为`true`。 - **`==`**(相等):比较值时,如果两边类型不同,会尝试进行类型转换。只有在转换后值相等时,结果才为`true`。 4. **深拷贝** - 深拷贝是指创建一个新对象,其内部的属性和方法都与原对象完全一致,且彼此独立。对于值类型,简单的赋值即可实现深拷贝。但对于引用类型,需要使用如`JSON.parse(JSON.stringify(obj))`或手动递归复制的方法。 5. **JavaScript内置函数** - JavaScript有许多内置函数,如数组方法`push`、`pop`、`shift`、`unshift`、`slice`、`concat`等,字符串方法`toUpperCase`、`toLowerCase`、`trim`等,以及数学函数`Math.pow`、`Math.sqrt`等。 6. **JS变量的存储方式** - JavaScript中的变量根据存储方式分为两种类型:**栈内存**(存储值类型)和**堆内存**(存储引用类型)。栈内存处理速度快,但空间有限;堆内存存储复杂对象,空间大,但访问速度相对较慢。 了解这些基本概念后,你可以更好地理解和操作JavaScript中的数据,编写更高效、可靠的代码。