在JavaScript中,怎样推断数据范例(范例检测)

javascript的数据范例能够分为两大类:原始范例和援用范例. 原始范例(基础数据范例)包含Undefined、Null、Boolean、Number和String五种,而援用范例也称为庞杂范例,在Javascript中是Object。与此相对应,它们的值也离别被称为原始值和庞杂值.

在许多处所我们须要举行范例检测, 平常的检测要领有以下几种:

经由过程typeof 操作符推断

typeof   2               //   number
typeof   null            //   object
typeof   {}              //   object
typeof    []             //   object
typeof    undefined      //   undefined
typeof   '222’           //   string
typeof  true             //   boolean

然则在运用 typeof 检测援用范例存储值会涌现一个题目,不管援用的是什么范例的对象,它都返回 “object”。而且null也不符合通例, 它是基础范例,然则typeof出来是object. 能够明白成是obj的占位符.

经由过程下面三种要领能够处置惩罚适才的题目.

经由过程Object.prototype.toString要领推断

这是对象的一个原生原型扩大函数,能够用来更准确的辨别数据范例。能够自行封装一下方便运用.

var gettype=Object.prototype.toString
gettype.call('aaaa')        //  [object String]

经由过程 constructor 属性推断

一切实例对象都有constructor属性,constructor属性指向prototype对象地点的组织函数,就是说指向建立这个实例的组织函数。

''.constructor==String    
 [].constructor==Array
var obj= new Object() 
obj.constructor==Object

经由过程instanceof操作符推断

instanceof 运算符与 typeof 运算符类似,用于辨认正在处置惩罚的对象的范例。与 typeof 要领差别的是,instanceof 要领请求开发者明确地确认对象为某特定范例。
obj instanceof Object,左侧操作数obj为待检测对象(假如不小心写成基础范例 比方数字原始值,就会返回false. ),右侧操作数Object为函数对象或者是函数组织器,不然抛出TypeError.

通例用法:

var a = new String("hello world");
console.log(a instanceof String);   // "true"

更主要的应用是 instanceof 能够在继续关联中用来推断一个实例是不是属于它的父范例。比方:

// 推断 foo 是不是是 Foo 类的实例 , 而且是不是是其父范例的实例
function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型继续
 
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true

本质就是:instanceof操作符推断左操作数对象的原型链上是不是有右侧这个组织函数的prototype属性,也就是说指定对象是不是是某个组织函数的实例,末了返回布尔值,这个对全部原型链上的对象都是有用的,因为instanceof对全部原型链上的对象都有用,因而同一个实例对象,能够会对多个组织函数都返回true.

PS: instanceof 运算符是从Java 中引入的. 其检测道理是js基于原型链的继续关联. 更多信息请参考https://www.ibm.com/developer…

    原文作者:开罐之王777
    原文地址: https://segmentfault.com/a/1190000015580514
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞