1.typeof 操作符

这是最常见的用于确定变量类型的方法。但是,需要注意的是,typeof 对于一些复杂类型(如数组、null和对象)的返回值可能并不直观。例如,typeof null 返回 'object',而 typeof [] 返回 'object'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let num = 123;  
console.log(typeof num); // 输出 "number"

let str = "hello";
console.log(typeof str); // 输出 "string"

let obj = {};
console.log(typeof obj); // 输出 "object"

let arr = [];
console.log(typeof arr); // 输出 "object"

let nullVar = null;
console.log(typeof nullVar); // 输出 "object"

2.instanceof 操作符

instanceof 用于测试构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。这通常用于判断一个对象是否是一个类的实例。

1
2
3
4
5
let arr = [];  
console.log(arr instanceof Array); // 输出 true

let date = new Date();
console.log(date instanceof Date); // 输出 true

3.constructor 属性

每个JavaScript对象都有一个 constructor 属性,它指向创建该对象的构造函数。通过比较 constructor 属性,我们可以确定对象的类型。

1
2
3
4
5
let arr = [];  
console.log(arr.constructor === Array); // 输出 true

let date = new Date();
console.log(date.constructor === Date); // 输出 true

注意:constructor 属性可以被修改,因此它可能不是最可靠的方法。

4.Object.prototype.toString.call() 方法

这个方法返回一个表示该对象的字符串。对于不同类型的对象,返回的字符串的格式是固定的,因此可以通过分析返回的字符串来精确出判断对象的类型。

1
2
3
4
5
6
7
8
9
10
11
let num = 123;  
console.log(Object.prototype.toString.call(num)); // 输出 "[object Number]"

let str = "hello";
console.log(Object.prototype.toString.call(str)); // 输出 "[object String]"

let arr = [];
console.log(Object.prototype.toString.call(arr)); // 输出 "[object Array]"

let obj = {};
console.log(Object.prototype.toString.call(obj)); // 输出 "[object Object]"