2-1. JavaScript 数据类型检查

在 JavaScript 中,类型检查主要依赖于以下方法:

1. typeof 操作符

typeof 操作符用于检查基本数据类型(如 number, string, boolean)和一些特殊类型(如 undefined, symbol)。

console.log(typeof 42);           // "number"
console.log(typeof 'hello');      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof undefined);    // "undefined"
console.log(typeof Symbol());     // "symbol"
console.log(typeof null);         // "object" (这是一个历史遗留问题)

2. instanceof 操作符

instanceof 用于检查对象是否是某个构造函数的实例。适用于对象类型和继承链中的对象。

console.log([] instanceof Array);       // true
console.log({} instanceof Object);      // true
console.log(new Date() instanceof Date); // true
console.log(function(){} instanceof Function); // true

3. Array.isArray()

Array.isArray() 专门用来检查一个值是否为数组。

console.log(Array.isArray([1, 2, 3])); // true
console.log(Array.isArray('hello'));   // false

4. Object.prototype.toString.call()

Object.prototype.toString.call() 方法可以提供更详细的数据类型信息。它常用于检查复杂对象类型。

console.log(Object.prototype.toString.call(42));          // "[object Number]"
console.log(Object.prototype.toString.call('hello'));     // "[object String]"
console.log(Object.prototype.toString.call([]));          // "[object Array]"
console.log(Object.prototype.toString.call({}));          // "[object Object]"
console.log(Object.prototype.toString.call(null));        // "[object Null]"
console.log(Object.prototype.toString.call(new Date()));  // "[object Date]"

5. isNaN()Number.isNaN()

isNaN() 用于检查一个值是否是 NaN。需要注意,isNaN() 在进行类型转换时可能会产生意外结果。Number.isNaN() 用于检查一个值是否是 NaN,不会进行类型转换。

console.log(isNaN('hello'));       // true (因为 'hello' 转换成了 NaN)
console.log(Number.isNaN('hello'));// false

console.log(Number.isNaN(NaN));   // true
console.log(Number.isNaN(42));    // false

6. 自定义检查函数

你可以编写自定义函数来进行更复杂的类型检查。适用于需要根据特定条件判断数据类型的场景。

function isString(value) {
  return typeof value === 'string' || value instanceof String;
}

console.log(isString('hello'));    // true
console.log(isString(new String('hello'))); // true
console.log(isString(42));         // false

总结

  • typeof: 适用于基本数据类型(number, string, boolean, undefined, symbol)。
  • instanceof: 适用于检查对象实例及其继承链。
  • Array.isArray(): 专门用于检查数组。
  • Object.prototype.toString.call(): 提供详细的对象类型信息。
  • isNaN()Number.isNaN(): 检查 NaN 值。
  • 自定义检查函数: 适用于更复杂的类型检查需求。
posted @ 2024-08-14 11:22  muling9955  阅读(20)  评论(0编辑  收藏  举报