码迷,mamicode.com
首页 > 编程语言 > 详细

复习javascript之类型检测

时间:2015-07-22 12:43:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

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

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

技术分享

typeof 123 返回number

技术分享

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

技术分享

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

技术分享

 

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()方法不能检测非原生构造函数的构造函数名。

 

复习javascript之类型检测

标签:

原文地址:http://www.cnblogs.com/kikiwu/p/4666662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!