Bootstrap

JavaScript中的类型判断

目录

  1. 前言
  2. 基本类型判断
  3. 复杂类型判断
  4. 特殊情况
  5. 总结
  6. 相关阅读

1. 前言

在JavaScript中,类型判断是编写稳健和可靠代码的关键。JavaScript具有动态类型系统,变量的类型可以在运行时改变,因此正确判断类型非常重要。

2. 基本类型判断

JavaScript中的基本类型包括:undefinednullbooleannumberstringsymbol

2.1 typeof 操作符

typeof 操作符返回一个字符串,表示未经计算的操作数的类型。

typeof undefined; // "undefined"
typeof null;      // "object"(历史遗留问题,实际上应为 "null")
typeof true;      // "boolean"
typeof 42;        // "number"
typeof "foo";     // "string"
typeof Symbol();  // "symbol"
typeof function(){}; // "function"
typeof {};        // "object"
typeof [];        // "object"

需要注意的是,typeof null 返回 "object" 是JavaScript语言的一个已知问题,而非类型判断的准确表达。

2.2 instanceof 操作符

instanceof 操作符用于判断一个对象是否是某个构造函数的实例。

let arr = [];
arr instanceof Array; // true

function Foo() {}
let fooInstance = new Foo();
fooInstance instanceof Foo; // true

2.3 constructor 属性

对象的 constructor 属性指向创建该对象的构造函数。

let obj = {};
obj.constructor === Object; // true

let num = new Number(42);
num.constructor === Number; // true

3. 复杂类型判断

JavaScript中的复杂类型包括:ArrayObjectFunction等。

3.1 Array.isArray() 方法

Array.isArray() 方法用于判断对象是否为数组。

Array.isArray([]);   // true
Array.isArray({});   // false
Array.isArray(null); // false

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

Object.prototype.toString.call() 方法可以更精确地判断对象的类型。

Object.prototype.toString.call([]);    // "[object Array]"
Object.prototype.toString.call({});    // "[object Object]"
Object.prototype.toString.call(null);  // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(42);    // "[object Number]"
Object.prototype.toString.call("foo"); // "[object String]"
Object.prototype.toString.call(function(){}); // "[object Function]"
Object.prototype.toString.call(Symbol());    // "[object Symbol]"

4. 特殊情况

在进行类型判断时,需要注意JavaScript的一些特殊情况,如 NaNInfinity-Infinity 的判断方法。

isNaN(NaN); // true
isFinite(Infinity); // false
isFinite(-Infinity); // false

5. 总结

JavaScript中的类型判断涵盖了基本类型和复杂类型,使用不同的操作符和方法可以确保精确判断对象的类型。合理的类型判断有助于避免类型错误和提高代码的健壮性。

6. 相关阅读

;