Skip to main content

数据类型

1、 如何判断数据类型

在 JavaScript 中,判断数据类型是一个常见的操作。主要有以下几种方法:

1. 使用 typeof 操作符

typeof 操作符是判断数据类型最常用的方法。它返回一个字符串,表示操作数的数据类型。常用的返回值包括:

  • "undefined":表示值是 undefined。
  • "number":表示值是数字。
  • "string":表示值是字符串。
  • "boolean":表示值是布尔值(true 或 false)。
  • "symbol":表示值是 Symbol 类型。
  • "function":表示值是函数。
  • "object":表示值是对象。

需要注意的是,typeof null 的返回值是 "object",这是 JavaScript 的一个历史遗留问题。

示例:

console.log(typeof undefined); // 输出:undefined
console.log(typeof 10); // 输出:number
console.log(typeof "hello"); // 输出:string
console.log(typeof true); // 输出:boolean
console.log(typeof Symbol()); // 输出:symbol
console.log(typeof function() {}); // 输出:function
console.log(typeof {}); // 输出:object
console.log(typeof null); // 输出:object

2. 使用 instanceof 操作符

instanceof 操作符用于判断一个对象是否是指定类型的实例。它返回一个布尔值,表示判断结果。

示例:

console.log(10 instanceof Number); // 输出:true
console.log("hello" instanceof String); // 输出:true
console.log(true instanceof Boolean); // 输出:true
console.log(Symbol() instanceof Symbol); // 输出:true
console.log(function() {} instanceof Function); // 输出:true
console.log({}) instanceof Object); // 输出:true
console.log(null instanceof Object); // 输出:true

console.log(10 instanceof Date); // 输出:false
console.log("hello" instanceof RegExp); // 输出:false
console.log(true instanceof Array); // 输出:false
console.log(Symbol() instanceof Error); // 输出:false
console.log(function() {} instanceof String); // 输出:false
console.log({}) instanceof Number); // 输出:false

3. 使用 Object.prototype.toString.call() 方法

Object.prototype.toString.call() 方法可以获取对象的 [[Class]] 内部属性值,该属性值表示对象的类型。

示例:

console.log(Object.prototype.toString.call(undefined)); // 输出:[object Window]
console.log(Object.prototype.toString.call(10)); // 输出:[object Number]
console.log(Object.prototype.toString.call("hello")); // 输出:[object String]
console.log(Object.prototype.toString.call(true)); // 输出:[object Boolean]
console.log(Object.prototype.toString.call(Symbol())); // 输出:[object Symbol]
console.log(Object.prototype.toString.call(function() {})); // 输出:[object Function]
console.log(Object.prototype.toString.call({})); // 输出:[object Object]
console.log(Object.prototype.toString.call(null)); // 输出:[object Null]

4. 使用 isxxx() 断言函数(仅限 ES2015 及更高版本)

ES2015 引入了新的断言函数,例如 isNaN(), isFinite(), isInteger(), isBoolean(), isString(), isArray(), isSymbol(), isRegExp() 等,用于判断值的具体类型。

示例:

console.log(isNaN(NaN)); // 输出:true
console.log(isFinite(10)); // 输出:true
console.log(isInteger(3.14)); // 输出:false
console.log(isBoolean(true)); // 输出:true
console.log(isString("hello")); // 输出:true
console.log(Array.isArray([])); // 输出:true
console.log(typeof Symbol() === 'symbol'); // 输出:true
console.log(test instanceof RegExp); // 输出:true

5. 使用自定义类型判断函数

对于自定义类型,可以使用自定义函数来判断数据类型。

示例:

function isPoint(obj) {
return obj && typeof obj.x === 'number' && typeof obj.y === 'number';
}

const point = { x: 10, y: 20 };
console.log(isPoint(point