JS中数据类型检测的方式

1、typeof

console.log(typeof ""); // string

console.log(typeof 1); // number

console.log(typeof true); // boolean

console.log(typeof null); // object

console.log(typeof undefined); // undefined

console.log(typeof []); // object

console.log(typeof function() {}); // function

console.log(typeof {}); // object

1)typeof用于基本数据类型判断是没有问题的;

2)但是遇到引⽤数据类型(如:Array)是不起作⽤的;

3)对于对象、null类型的数据都返回的是对象,无法具体区分;

2、instanceof

console.log("1" instanceof String);              // false

console.log(1 instanceof Number);                // false

console.log(true instanceof Boolean);            // false

console.log(null instanceof Null);               // Null is not defined

console.log(undefined instanceof Undefined);     // Undefined is not defined

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

console.log(function() {} instanceof Function); // true

console.log({} instanceof Object);               // true

1)不可以判断基本数据类型

2)可以判断引⽤数据类型

3)如果通过new关键字去创建基本数据类型,这时就会输出true,如下:

console.log(new String("1") instanceof String);        // true

console.log(new Number(1) instanceof Number);        //true

console.log(new Boolean(true) instanceof Boolean);    //true

4)不能判断null和undefined

3、constructor

console.log("1".constructor === String);                 // true

console.log((1).constructor === Number);                 // true

console.log(true.constructor === Boolean);                 // true

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

console.log(function() {}.constructor === Function);   // true

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

console.log((null).constructor === Null);   //  Cannot read property 'constructor' of null at <anonymous>:1:20

console.log((undefined).constructor === Undefined); // Cannot read property 'constructor' of undefined at <anonymous>:2:25

1)null和undefined 还是不能判断

2)其余的,constructor 似乎完全可以应对基本数据类型和引⽤数据类型,都能检测出数据类型

3)事实上并不是如此,来看看为什么:

function Fn() {}

Fn.prototype = new Array();

var f = new Fn();.

console.log(f.constructor === Fn); // false

console.log(f.constructor === Array); // true

声明了⼀个构造函数,并且把它的原型指向了Array的原型,所以这种情况下不行。

4、Object.prototype.toString.call()

var a = Object.prototype.toString;

console.log(a.call("aaa")); // [object String]

        console.log(a.call(1)); // [object Number]

        console.log(a.call(true)); // [object Boolean]

        console.log(a.call(null)); // [object Null]

        console.log(a.call(undefined)); // [object Undefined]

        console.log(a.call([])); // [object Array]

        console.log(a.call(function() {})); // [object Function]

        console.log(a.call({})); // [object Object]

1)jQuery实际上就是采⽤这个⽅法进⾏数据类型检测的

2)可以检测所有的数据类型,包括null和undefined

posted @ 2022-06-14 16:32  深夜的海洋  阅读(50)  评论(0编辑  收藏  举报