关于js中判断数据类型的几种方式

1.通过typeof 来进行判断,可以判断基本类型,不能判断引用类型比如array,date,function等,而且对null类型会自动判断成Object

console.log(typeof 123);   //number
console.log(typeof 'hxn');  //string
console.log(typeof true);     //boolean
console.log(typeof undefined); //undefined
console.log(typeof null)   //Object

2.通过instanceof ,可以判断引用类型数据,不能判断基本数据类型

const arr1 = [1,2,3]
console.log('hxn' instanceof String);   //false
console.log(123 instanceof Number);   //false
console.log(arr1 instanceof Array);    //true
console.log({username} instanceof Object); //true

3. 通过constructor ,可以判断所有的类型,但是对于原型链修改后的数据类型就会导致判断不准确

let n = 1   
const arr1 = [1,2,3]
const obj11 = function(username,age){
     this.username = username;
     this.age = age;
}
console.log('hxn'.constructor === String);  //true
console.log(n.constructor === Number);   //true
console.log(arr1.constructor === Array); //true
console.log({username}.constructor === Object);  //true
console.log(obj11.constructor === Function);  //true
Array.prototype.constructor = 'a'  //更改constructor
console.log(arr1.constructor === Array) //false

4. 通过Object.prototype.toString.call() 。

const obj = {
   username:'hxn1'
}
console.log(Object.prototype.toString.call({username})); //Object
console.log(Object.prototype.toString.call(123));   //Number
console.log(Object.prototype.toString.call(null));   //Null
console.log(Object.prototype.toString.call(undefined));//Undefined
console.log( Object.prototype.toString.call(obj)); //Object
console.log(Object.prototype.toString.call('hxn')); //String
console.log(Object.prototype.toString.call([1,2,3])); //Array

综上所述:

js可以通过这四种方法进行判断,但是前面几种判断方式基本都有自己的一个缺陷,然后最后一种方式Object.prototype.toString.call() 是最优的解决方式。

你可能感兴趣的:(前端小知识,javascript,前端,html5)