js数据类型有哪些
基本数据类型(值类型): Number、String、Boolean、Undefined、Null、Symbol(es6新增独一无二的值) 和 BigInt(es10新增);
引用数据类型: Object (Object,Array, function,Date,RegExp。)
JS数据类型判断
五种方法
typeof、instanceof、constructor、Object.prototype.toString.call()、jquery.type()
1.typeof
typeof一般检测基本数据类型中:Number,String,Boolean,undefined 以及引用数据类型中Function ,分别返回对应的数据类型小写字符。
另:用typeof检测构造函数创建的Number,String,Boolean都返回object
typeof不可以检测基本数据类型中:null 和引用数据类型中的:Array,Object,Date,RegExp。他们都会返回小写的object
console.log(
typeof 100, //"number"
typeof 'abc', //"string"
typeof false, //"boolean"
typeof undefined, //"undefined"
typeof null, //"object"
typeof [1,2,3], //"object"
typeof {a:1,b:2,c:3}, //"object"
typeof new Date(), //"object"
typeof /^[a-zA-Z]{5,20}$/, //"object"
typeof new Error() //"object"
typeof new String('abc'),// 'string'
typeof new Boolean(true),//'boolean'
);
2,instanceof
它用来判断这个构造函数的原型是否在给定对象的原型链上。
instanceof是不可以检测基本数据类型中:Number,String,Boolean。(因为js中没有这种全局类型)但是构造函数创建的值可以
let num =new Number(1);
let str = new String('abc');
let bool = new Boolean(true);
//这样定义才能检测出.
let num = 1;
let str = 'abc';
let bool = true;
//这样定义是检测不出来的
3,constructor
constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,
因此可以使用某个对象上的constructor属性来判断是否是某个类型
注意:除了undefined和null之外,其他类型都可以通过constructor属性来判断类型。
4 . 使用Object.prototype.toString.call()检测对象类型
定义:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于”[object Array]“的字符串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不可直接访问的属性,称为“内部属性”)。利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。
5,jquery.type()
typeOf能判断出一个变量的类型,但是只能判断出number,string,function,boolean,undefined,null和其他对象类型返回结果都为object.
instanceof能判断出一个对象是否是另一个类的实例。
Object.prototype.toString.call能判断出所有变量的类型,返回值为[Object ***]。