typeof 检测数据类型

本文详细讲解了JavaScript中typeof和instanceof的用法,包括它们分别用于检测数据类型和判断对象实例,以及各种数据类型的返回值和实例检查技巧。

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

typeof  检测数据类型     返回基本数据类型 

1、数字类型、typeof 返回的值是 number。比如说:typeof(1),返回值是 number

2、字符串类型,typeof 返回的值是 string。比如 typeof(“123”返回值是 string)

3、布尔类型,typeof 返回的值是 boolean。比如 typeof(true)返回值是 boolean

4、对象、数组、null 返回的值是 object。
  比如 typeof(window),typeof(document),typeof(null) 返回的值都是 object

5、函数类型,返回的值是 function。
比如:typeof(eval),typeof(Date)返回的值都是 function。

6、不存在的变量、函数或者 undefined,将返回 undefined。
 比如:typeof(abc)、typeof(undefined) 都返回 undefined

JS语法规定
undefined返回undefined;

null返回object对象,

NaN返回number,  

instanceof  判断是否为实例对象     返回一个布尔值

构造函数通过 new 可以创建一个实例对象instanceof 能判断这个实例对象是否是之前那个构造函数生成的对象

// 定义构建函数
let Car = function() {}
let newCar = new Car()
newCar instanceof Car // true

用于检验构造函数的 prototype 属性是否出现在某个实例对象的原型链上 

顺着原型链去找,找到相同的原型对象,返回true,否则为false

null 双等于==undifined

   == 表示是相等,只比较内容
   === 表示是全等,不仅比较内容,也比较类型

 

03-08
### typeof 操作符概述 JavaScript 中的 `typeof` 是一种一元操作符,用于确定其操作数的数据类型。该操作数可以是任何类型的值,包括但不限于变量、字面量和其他表达式[^1]。 #### 基础数据类型识别 对于基本数据类型,`typeof` 能够提供直观的结果: - 对于字符串(String),无论是否使用引号包裹,`typeof 'abc'` 或者 `typeof('abc')` 都会返回 `"string"`[^5]。 - 数字(Number)类型,比如整数或浮点数,像 `typeof 123` 将得到 `"number"`。 - 布尔值(Boolean),例如 `true` 或 `false`,对应的 `typeof true` 结果为 `"boolean"`。 - 符号(Symbol),这是 ES6 新增的一种原始数据类型,`typeof Symbol()` 返回 `"symbol"`。 ```javascript console.log(typeof "hello"); // string console.log(typeof 42); // number console.log(typeof true); // boolean console.log(typeof Symbol()); // symbol ``` #### 特殊情况处理 然而,在某些情况下,`typeof` 的行为可能不符合直觉: - 当遇到未定义的变量时,如从未声明过的 `myVar`,执行 `typeof myVar` 会安全地返回 `"undefined"`,而不会抛出错误[^4]。 - 关键的是,尽管 `null` 表示空指针对象,但 `typeof null` 却意外地返回 `"object"`,这被认为是一个历史遗留问题[^3]。 - 同样值得注意的是,虽然 NaN(Not-a-Number)代表不是一个有效的数值,可是 `typeof NaN` 居然也返回 `"number"`。 ```javascript let undeclared; console.log(typeof undeclared); // undefined console.log(typeof null); // object console.log(typeof NaN); // number ``` #### 复杂结构体判断 当涉及到复杂的数据结构时,`typeof` 可能显得力不从心: - 如前所述,数组实际上被认为是对象的一个子集,所以无论是通过方括号 `[ ]` 创建还是调用构造器 `new Array()` 构建出来的数组实例,`typeof [1, 2, 3]` 和 `typeof new Array(1, 2, 3)` 都只会给出 `"object"` 的反馈[^2]。 - 类似地,日期对象同样属于广义上的对象范畴,因此 `typeof new Date()` 也会报告为 `"object"`。 ```javascript const arr = [1, 2, 3]; console.log(typeof arr); // object console.log(typeof new Date()); // object ``` 为了更加精确地区分这些复杂的实体,建议采用其他手段来辅助判断,比如利用 `Array.isArray()` 方法专门验证某个值是不是数组,或是借助 `Object.prototype.toString.call(value)` 来获取更为详细的内部标签信息。 ```javascript console.log(Array.isArray([1, 2, 3])); // true console.log(Object.prototype.toString.call(new Date())); // "[object Date]" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值