JavaScript怎么判断数据类型?8 种方式分享

JavaScript怎么判断数据类型?8 种方式分享

在 JavaScript 中,我们经常需要判断数据的类型。这对于编写高质量的 JavaScript 代码非常重要。本文将分享 8 种常见的 JavaScript 数据类型判断方法。

1. 使用 typeof

typeof 运算符可以判断一个值的类型,返回值为一个字符串。

typeof 42 // "number"

typeof true // "boolean"

typeof "Hello, world!" // "string"

typeof undefined // "undefined"

typeof null // "object"

typeof [] // "object"

typeof {} // "object"

typeof function(){} // "function"

注意:typeof null 返回 "object",这是由于历史原因造成的,实际上 null 是一个空值(无值的引用类型)。

2. 使用 instanceof

instanceof 运算符可以判断一个对象是否是某个类或构造函数(或其派生对象)的实例。

let arr = [1, 2, 3];

arr instanceof Array // true

arr instanceof Object // true

arr instanceof Date // false

let now = new Date();

now instanceof Date // true

now instanceof Object // true

now instanceof Array // false

注意:instanceof 判断的是对象的原型链,而不是对象本身的类型。例如上面示例中的 arr instanceof Object 返回 true,因为数组是 Object 的实例。

3. 使用 Object.prototype.toString.call()

Object.prototype.toString.call() 方法可以返回一个值的类型,格式为 "[object 类型]"

Object.prototype.toString.call(42) // "[object Number]"

Object.prototype.toString.call(true) // "[object Boolean]"

Object.prototype.toString.call("Hello, world!") // "[object String]"

Object.prototype.toString.call(undefined) // "[object undefined]"

Object.prototype.toString.call(null) // "[object Null]"

Object.prototype.toString.call([]) // "[object Array]"

Object.prototype.toString.call({}) // "[object Object]"

Object.prototype.toString.call(function(){}) // "[object Function]"

注意:Object.prototype.toString.call() 中的 call() 方法不能省略,因为 toString() 方法是 Object 原型链上的方法,需要通过 call() 明确指定调用对象。

4. 使用 Array.isArray()

Array.isArray() 方法可以判断一个对象是否为数组。

Array.isArray([]) // true

Array.isArray({}) // false

Array.isArray("Hello, world!") // false

注意:Array.isArray() 是 ES5 新增的方法,不兼容低版本浏览器。

5. 使用 constructor

constructor 属性指向创建实例的构造函数。

let arr = [1, 2, 3];

arr.constructor === Array // true

let now = new Date();

now.constructor === Date // true

注意:constructor 属性可以被改变,不太可靠。

6. 使用 hasOwnProperty

hasOwnProperty 方法可以判断一个对象是否有指定属性。

let obj = {name: "Tom", age: 18};

obj.hasOwnProperty("name") // true

obj.hasOwnProperty("toString") // false

注意:hasOwnProperty 只会在对象自身中查找属性,不会查找原型链上的属性。

7. 使用 is

is 运算符可以判断两个值是否相等,返回一个布尔值。

NaN === NaN // false

Object.is(NaN, NaN) // true

0 === -0 // true

Object.is(0, -0) // false

null === null // true

undefined === undefined // true

Object.is(null, undefined) // false

注意:is 运算符与 ===== 有所不同,它可以正确处理特殊值(如 NaN、+0 和 -0)。

8. 使用正则表达式

可以使用正则表达式判断字符串是否符合某种类型的数据格式。

let regExp = /^-?\d+(\.\d{1,2})?$/;

regExp.test("123") // true

regExp.test("-123.45") // true

regExp.test("12.345") // false

regExp.test("12x") // false

注意:使用正则表达式需要熟悉正则语法。

总结

以上就是 JavaScript 中常用的 8 种数据类型判断方法。了解这些方法可以更好地掌握 JavaScript 开发技能。