夜下客

繁体版 简体版
夜下客 > JS修炼法则 > 第4章 JS类型判断

第4章 JS类型判断

引子:

JS 有 8 种数据类型,那我们如何判断不同的数据类型,进行对应的数据处理呢?

常见的有 typeof, instanceof, constructor, Object.prototype.toString.call,Reflect.apply(Object.prototype.toString, val, [])。

第一种常用于检测 基本类型和 Function,除 null 外。

第二三种常用于检测 引用类型,无法区分基本类型。

第四五种常用于检测 基本类型和引用类型。

同时,我们扩展延伸一下,深浅拷贝的相关知识:定义,如何实现一个深浅拷贝,什么时候用深拷贝、什么时候用浅拷贝。

1. typeof 关键字

1-1.语法

typeof operand typeof(operand)

operand: 一个表示对象或原始值的表达式,其类型将被返回。

返回值:字符串

1-2.优点

用于区分基本数据类型,但无法区分null

1-3.缺点

无法区分引用数据类型,但能区分function

1-4.代码实践

// 基本数据类型

console.log(typeof undefined) // 'undefined'

console.log(typeof 2) // 'number'

console.log(typeof true) // 'boolean'

console.log(typeof 'str') // 'string'

console.log(typeof Symbol('a')) // 'symbol'

console.log(typeof 1n) // 'bigint'

console.log(typeof null) // 'object'

// 引用数据类型

console.log(typeof []) // 'object'

console.log(typeof {}) // 'object'

console.log(typeof new Date()) // 'object'

console.log(typeof function () {}) // 'function'

// 有趣的,要注意

console.log(typeof Infinity) // 'number'

console.log(typeof NaN) // 'number'

console.log(typeof Math.LN2) // 'number'

console.log(typeof new Number(1)) // 'object'

console.log(typeof Number('1')) // 'number'

console.log(typeof typeof 1) // 'string'

// typeof 一个不存在的变量,不会报错,只会返回'undefined'

console.log(typeof smallAJ) // 'undefined'

typeof Object // 'function'

const fn = () => {}

typeof fn // 'function'

1-5.原理

// 第一版JS实现

if (JSVAL_IS_VOID(v)) { // (1)判断是否为 undefined

type = JSTYPE_VOID;

} else if (JSVAL_IS_OBJECT(v)) { // (2)判断是否为对象

obj = JS

『加入书签,方便阅读』