JavaScript typeof, null, 和 undefined基础

本文介绍JavaScript中使用typeof操作符检测变量类型的用法,并解释了null和undefined的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typeof 操作符

可以使用 typeof 操作符来检测变量的数据类型。

typeof "John"                // 返回 string 
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

// 在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。 
// 对于数组和对象可以使用Object.prototype.toString来区分
Object.prototype.toString.call([1,2,3,4]) = "[object Array]"
Object.prototype.toString.call({name:'John', age:34}) = "[object Object]"

null

在 JavaScript 中 null 表示 “什么都没有”。
null是一个只有一个值的特殊类型。表示一个空对象引用。
用 typeof 检测 null 返回是object。

可以设置为 null 来清空对象:

let person = null;           // 值为 null(空), 但类型为对象

可以设置为 undefined 来清空对象:

let person = undefined;     // 值为 undefined, 类型为 undefined

undefined

在 JavaScript 中, undefined 是一个没有设置值的变量。
typeof 一个没有值的变量会返回 undefined。

let person;                  // 值为 undefined(空), 类型是undefined

任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined.

let person = undefined;          // 值为 undefined, 类型是undefined

undefined 和 null 的区别

null 和 undefined 的值相等,但类型不等:

typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true
### 关于 `typeof` 对 `null` `undefined` 的行为 在 JavaScript 中,`typeof` 是一种运算符,用于返回操作数的数据类型。对于 `null` 类型的行为存在一个历史遗留问题:尽管 `null` 表示的是空值,但它被设计为对象类型的实例[^2]。因此,在使用 `typeof` 检查 `null` 时,它会错误地返回 `"object"`。 以下是具体的解释: - 当对变量应用 `typeof` 并且该变量未定义 (`undefined`) 或者显式赋值为 `undefined` 时,`typeof` 将返回 `"undefined"`[^1]。 ```javascript let k2; // 声明但未初始化 console.log(typeof k2); // 输出 "undefined" ``` - 如果尝试检查 `null` 的类型,则会出现异常情况——即使 `null` 实际上是一个独立的原始类型,`typeof null` 返回的结果却是 `"object"`。 ```javascript let k1 = null; console.log(typeof k1); // 输出 "object" ``` 这种不一致源于早期 JavaScript 设计中的缺陷,当时为了兼容某些实现细节而将 `null` 定义成了对象类型的一部分。 另外需要注意的一点是关于匿名函数以及声明提升 (Hoisting),这虽然不是直接涉及 `typeof` 的讨论范围,但在理解作用域执行上下文时非常重要[^3]。例如: ```javascript functionExample(); // 能够正常调用是因为函数声明会被提升到顶部 var exampleVar; function functionExample() { console.log('Function declaration hoisted'); } exampleVar = 'Variable assignment'; // 下面这段代码展示了变量声明也会被提升但是其初始值不会自动设置直到实际到达相应语句位置为止 console.log(exampleVar); ``` #### 总结 综上所述,当利用 `typeof` 来判断某个值是否属于特定类别时需特别留意 `null` 特殊情形下的表现形式;而对于完全不存在或者尚未赋予任何有效数值的情况则通常表现为 `"undefined"`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值