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 开发技能。