js判断数据类型的方式

在JavaScript中,有多种方式可以判断变量的数据类型。以下是其中的一些常见方法:

  1. typeof 运算符

typeof 运算符返回一个表示未定义、函数、对象(在JavaScript中,数组和null也是对象)、布尔值、数字、字符串或符号的字符串。

let num = 123;
console.log(typeof num); // "number"

let str = "hello";
console.log(typeof str); // "string"

let obj = {};
console.log(typeof obj); // "object"

let arr = [];
console.log(typeof arr); // "object",注意这里返回的是"object",而不是"array"

let func = function() {};
console.log(typeof func); // "function"

let undef;
console.log(typeof undef); // "undefined"

let sym = Symbol('test');
console.log(typeof sym); // "symbol"

注意:typeof null 会返回 "object",这是一个常见的JavaScript错误。

  1. instanceof 运算符

instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。

let arr = [];
console.log(arr instanceof Array); // true

let date = new Date();
console.log(date instanceof Date); // true

let obj = {};
console.log(obj instanceof Object); // true
  1. constructor 属性

每个JavaScript对象都有一个 constructor 属性,它引用了创建该对象实例的构造函数。

let date = new Date();
console.log(date.constructor === Date); // true

let arr = [];
console.log(arr.constructor === Array); // true

let obj = {};
console.log(obj.constructor === Object); // true

注意:constructor 属性可以被修改,因此它可能不是一个完全可靠的方法来检查对象的类型。

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

这是一种更可靠的方式来获取对象的类型,因为它不会被对象的 toStringvalueOf 方法覆盖。

let num = 123;
console.log(Object.prototype.toString.call(num)); // "[object Number]"

let str = "hello";
console.log(Object.prototype.toString.call(str)); // "[object String]"

let arr = [];
console.log(Object.prototype.toString.call(arr)); // "[object Array]"

let obj = {};
console.log(Object.prototype.toString.call(obj)); // "[object Object]"

let nullVal = null;
console.log(Object.prototype.toString.call(nullVal)); // "[object Null]"

let undef;
console.log(Object.prototype.toString.call(undef)); // "[object Undefined]"

你可以通过提取上述结果中的类型部分来进一步简化这个操作:

function getObjectType(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}

console.log(getObjectType(num)); // "Number"
console.log(getObjectType(str)); // "String"
// ...以此类推

在实际开发中,你可以根据需要选择适合的方法来检查变量的类型。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值