Skip to content

typeof 操作符

typeof 是一个一元操作符,可以用来检测变量的类型。它返回一个表示数据类型的字符串。

javascript
let num = 123;
let str = "hello";
let bool = true;
let undef;
let nul = null;
let obj = {};
let arr = [];

console.log(typeof num); // "number"
console.log(typeof str); // "string"
console.log(typeof bool); // "boolean"
console.log(typeof undef); // "undefined"
console.log(typeof nul); // "object" (注意:null 被认为是对象类型)
console.log(typeof obj); // "object"
console.log(typeof arr); // "object"

instanceof 操作符

instanceof 操作符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

javascript
function Person(name) {
  this.name = name;
}

let person = new Person("Alice");

console.log(person instanceof Person); // true
console.log(person instanceof Object); // true

Object.prototype.toString.call() 方法

这个方法可以返回一个表示对象类型的字符串。它比 typeof 更加准确,因为它可以区分数组、日期、正则表达式等特殊对象。

javascript
let num = 123;
let str = "hello";
let bool = true;
let arr = [];
let date = new Date();
let reg = /test/;

console.log(Object.prototype.toString.call(num)); // "[object Number]"
console.log(Object.prototype.toString.call(str)); // "[object String]"
console.log(Object.prototype.toString.call(bool)); // "[object Boolean]"
console.log(Object.prototype.toString.call(arr)); // "[object Array]"
console.log(Object.prototype.toString.call(date)); // "[object Date]"
console.log(Object.prototype.toString.call(reg)); // "[object RegExp]"

Array.isArray() 方法

Array.isArray() 是一个全局函数,用于检测一个值是否是数组。

javascript
let arr = [];
let notArr = {};

console.log(Array.isArray(arr)); // true
console.log(Array.isArray(notArr)); // false

Number.isNaN() 方法

Number.isNaN() 用于检测传入的值是否是 NaN,并且该值是数字类型。

javascript
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("NaN")); // false
console.log(Number.isNaN(123)); // false

isNaN() 函数

isNaN() 函数用于检测传入的值是否是 NaN,但它会先尝试将值转换为数字。

javascript
console.log(isNaN(NaN)); // true
console.log(isNaN("NaN")); // true (注意:这里会先尝试将字符串转换为数字)
console.log(isNaN(123)); // false

在实际开发中,通常推荐使用 typeofObject.prototype.toString.call() 来进行类型检测,因为它们提供了更准确的结果。instanceof 适用于检测对象的构造函数,而 Array.isArray()Number.isNaN() 是专门用于检测数组和 NaN 的函数。