js数据类型
8种
undefined、 null、 Number 、 string、 Boolern、 symbol、 BigInt、 object
内置对象
Array
AggregateError // 错误集合
ArrayBuffer
判断js数据类型的方法
1.最常见的判断方法:typeof
2.已知对象类型: instanceof
3.对象原型链判断方法: prototype 通用但很繁琐
4.根据对象的构造器constructor进行判断
5.jQuery方法: jquery.type()
6.严格运算符: ===
- typeof
6 种原始类型,使用 typeof 运算符检查:
undefined:typeof instance === "undefined"
Boolean:typeof instance === "boolean"
Number:typeof instance === "number"
String:typeof instance === "string
BigInt:typeof instance === "bigint"
Symbol :typeof instance === "symbol"
null:typeof instance === "object"。
Object:typeof instance === "object"。
缺点:
任何 constructed 对象实例的特殊非数据结构类型,也用做数据结构:
new Object,
new Array,
new Map,
new Set,
new WeakMap,
new WeakSet,
new Date,
typeof 的结果都是 object
- instanceof
[1,2,3] instanceof Array // true
new Date() instanceof Date // true
new Function() instanceof Function // true
null instanceof Object // false
3.对象原型链判断方法: prototype toString
console.log(Object.prototype.toString.call("11")) // [object String]
console.log(Object.prototype.toString.call(11)) // [object Number]
console.log(Object.prototype.toString.call(new Number(11))) // [object Number]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call([1, 2])) // [object Array]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
- constructor
constructor 判断方法跟instanceof相似,但是constructor检测Object与instanceof不一样,constructor还可以处理基本数据类型的检测,不仅仅是对象类型
注意:
1.null和undefined没有constructor;
2.判断数字时使用(),比如 (123).constructor,如果写成123.constructor会报错
3.constructor在类继承时会出错,因为Object被覆盖掉了,检测结果就不对了
五.jQuery方法: jquery.type()
据说是无敌万能的方法.如果对象是null跟undefined,直接返回"null"和"undefined",
注意:在使用时,一定要引入jquery文件,不然会报错,jQuery is not defined
一般变量用typeof,
已知对象类型用instanceof,
通用方法Object.prototype.toString.call()
jQuery项目万能方法jQuery.type()
参照jq 封装
const class2type = {};
const typeList = "Boolean Number String Function Array Date RegExp Object Error Symbol Bigint";
typeList.split(" ").forEach(function (name) {
class2type["[object " + name + "]"] = name.toLowerCase();
});
export const toType = function(obj) {
if (obj == null) {
return obj + "";
}
return typeof obj === "object"
? class2type[toString.call(obj)] || "object"
: typeof obj;
};