博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复习javascript之类型检测
阅读量:5061 次
发布时间:2019-06-12

本文共 966 字,大约阅读时间需要 3 分钟。

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

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

 

转载于:https://www.cnblogs.com/kikiwu/p/4666662.html

你可能感兴趣的文章
PHP设计模式:结构型之门面(facade)
查看>>
ios中UITableViewCell选中后的颜色设置
查看>>
[搜片神器]迅雷云播视频地址获取代码分享[自己动手丰衣足食]
查看>>
两种不同的多路选择器?
查看>>
关于是用dotnet获取本机IP地址+计算机名的方法
查看>>
ajax请求步骤
查看>>
数据存储网址
查看>>
阅读程序并回答问题
查看>>
flash_header.S ( freescale imx6 board)
查看>>
C# 操作Excel文件的方法
查看>>
Converter -> public static int ToInt32(double value) 你用对了么?
查看>>
向大家推荐一个C/C++通用Makefile
查看>>
PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
查看>>
微信SDK
查看>>
foreach 语法结构以及扩展
查看>>
BZOJ 1531: [POI2005]Bank notes( 背包 )
查看>>
二分查找
查看>>
AWVS使用手册
查看>>
WLST
查看>>
【android】简单的布局和控件&简单的练习作品
查看>>