复习javascript之类型检测

昨天面了阿里一面,有一个检测类型问题,虽然当时给了答案,但是感觉自己还是不够确信,事实的结果是我给的答案有几个的确是错的~~唉~~有道是信誓旦旦不思其反。面试的时候脑子进水~~

1.typeof

• typeof null 返回object,这是因为特殊值null被认为是一个空的对象引用

• typeof 123 返回number

• typeof NaN 返回number 。NaN,非数值是一个特殊的数值。 这个数值用来表示一个本来要返回数值的操作数未返回数值的情况。

• typeof new Number(123) 返回object, 是一个构造函数Number的实例。

 2.instanceof

• 123 instanceof Number   返回false ,因为instanceof 操作符检测基本类型的值都会返回false

• new Number(123) instanceof Number  返回true。

来看instanceof的定义,result = variable instanceof constructor

即如果变量是给定引用类型的实例,那么instanceof操作符就会返回true。显而易见,new Number(123)是Number的一个实例。

• Number(123) instanceof Number 返回false

Number(123)调用Number函数。结果只是 一个数值,是基本数据类型,所以false。

 

好,面试的这个题分析完毕,但是呢,这种类型检测并不是最优。typeof在一些低版本中检测正则会返回function,而instanceof操作符在存在多个全局作用域时也会问题多多。

这里介绍一个安全的类型检测,object的toString()方法。在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串。每个类在内部都会有一个[[class]]属性,这个属性中就知道了上述字符串中的构造函数名。

举个例子

但是toString()方法不能检测非原生构造函数的构造函数名。

 

posted on 2015-07-22 10:44  KIKIWU  阅读(190)  评论(0编辑  收藏  举报

导航