JavaScript中如何检测变量类型
JavaScript中如何检测变量类型
一、typeof:
1.对一个值使用typeof会返回下列字符串之一:
-
- 'number':表示值为数值型。
- 'string':表示值为字符串型。
- 'boolean':表示值为布尔类型。
- 'undefined':表示值未定义。
- 'symbol' :表示值为符号。
- 'object':所有引用类型除了函数类型(function)以外都返回object。
- 'function':表示为函数型。
2.使用方法:
let num = 15 let str = '字符串' console.log(typeof num); console.log(typeof str);

3.缺点:无法分辨出引用类型当中具体什么类型。
二、instanceof:
1.对左侧对象是否是右侧构造函数的实例化对象的判断 返回值为Boolean。
2.使用方法:
console.log(10 instanceof Number);
console.log('字符串' instanceof String);
console.log([] instanceof Array);

3.原理:现在定义一个变量数组。直接在控制台输出数组。可以看到数组当中存在Prototype这个属性,指向的是数组原型对象。而数组下面的Prototype指向的是object。

那么arr的原型链就如下所示:

那么现在就很明确了instanceof的原理,如果“右侧”对象存在于“左侧” 的原型链中 就返回true 否则就返回 false
4.缺点: 无法判断基本类型变量,而可以对引用类型做出判断。且无法检测undefined与null
三、constructor:
1.检测实例和类的关系,从而检测数据类型。引用原来构造函数该对象的函数。因为constructor是Object类型的原型属性,它能够返回当前对象的构造器
2.使用方法:
console.log((10).constructor === Number); console.log(('字符串').constructor ===String); console.log(([]).constructor ===Array);

3.缺点:无法检测undefined与null
四、利用Object.prototype.toString:
1.在Object的原型上有一个方法toString用于检测数据类型。
2.使用方法:
let a = Object.prototype.toString console.log(a.call(10)); console.log(a.call('字符串')); console.log(a.call([]));

3.首先明确一点,根据原型链,所有对象都是object的孩子,而只有Object.prototype.toString拥有检测类型的能力。虽然孩子们继承了toString方法但是无法检测类型。
所以如果想要进行类型判断,就需要调用Object.prototype.toString才可以。
那么call的作用就是:改变this的指向,将其this指向拥有此方法的对象,就可以调用该方法了 。

浙公网安备 33010602011771号