数据类型
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