"JS对象笔记"
在JavaScript中,对象是编程的核心概念之一。这篇笔记主要探讨了JavaScript中的对象、数据类型以及`undefined`和`null`的区别,同时还涉及到了类型检测的方法。
首先,我们来看面试题中的三个例子:
- `console.log(typeof(NaN))` 输出 `number`,即使NaN代表“非数字”,它在JavaScript中仍被视为一种特殊的数字类型。
- `console.log(typeof(undefined))` 输出 `undefined`,这是JavaScript中的一个特殊值,表示变量未定义。
- `console.log(typeof(null))` 输出 `object`,这是一个历史遗留问题,实际上`null`是一个独立的值,表示“无”或“空”。
接着,笔记回顾了JavaScript的数据类型:
- 原始数据类型(基本数据类型)包括字符串、数值、布尔值、`undefined`和`null`。
- 引用类型主要是对象,如数组、函数等。
基本数据类型与引用类型的主要区别在于存储方式。基本类型是按值存储,而对象是按引用存储。例如,两个不同的数组即使内容相同,它们在内存中也是两个独立的对象,所以`[1,2,3] == [1,2,3]`会返回`false`。而基本类型的值,如字符串或数字,如果值相等,它们就是相等的。
检测类型通常使用`typeof`和`instanceof`操作符。`typeof`可以返回一个变量的数据类型,但要注意`typeof null`返回的是`"object"`。`instanceof`则用于检测一个对象是否属于某个类的实例,如`fun([1,2,3])`会返回`"数组"`,因为数组在JavaScript中是对象的一种形式。
`undefined`和`null`虽然在某些场景下都表示“无”,但它们是不同的。`undefined`通常用于表示变量未初始化或未定义,而`null`则是一个特定的值,表示一个空对象指针。在转换为数值时,`undefined`变为`NaN`,而`null`变为`0`。
在JavaScript中创建对象有两种主要方式:字面量形式和构造函数形式。字面量形式是直接用花括号`{}`定义对象,如`var obj = {key: value}`;构造函数形式则是通过`new`关键字调用一个函数来创建,如`var obj = new Object()`。
对象的特性还包括属性和方法,可以通过点符号或方括号符号来访问,如`obj.property`或`obj['property']`。此外,JavaScript还支持原型链和原型继承,使得对象可以共享属性和方法。
总结来说,理解JavaScript中的对象、数据类型以及它们之间的差异是编写高效和可维护代码的关键。对于开发者而言,熟练掌握这些基础知识是至关重要的,特别是在面试和实际开发中。