JavaScript数据类型检测
JavaScript共有四种数据检测方法,最优解决方案为Object.prototype.toString.call()
一、typeof
typeof 操作符返回一个字符串,表示未经计算的操作数的类型。
语法
typrof后接操作数,可以用括号括起来,也可以不用。
typeof operand
typeof(operand)
解释
typeof仅能用于检测基本数据类型的值,其返回值为表示当前数据类型的字符串。在JavaScript中,null被认为是空对象,因此typeof null的返回值为 ‘object’。
typeof后面出现非基本数据类型的话,返回值均为 ‘object’。
二、instanceof
instanceof并非专用于检测数据类型,它的实际作用是:检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
语法
instanceof操作符前面为被检测对象,后面为构造函数。
object instanceof constructor
解释
instanceof只能用来判断一个操作数是否是另一个操作数的实例,而不能判断被检测数到底是什么数据类型。
并且,在实际使用中还存在页面上由两个全局执行环境的情况。这是instanceof会无法判断其结果。例如:当前页面存在全局执行环境A和全局执行环境B,在A中创建一个数组再传递给执行环境B,那么在B中执行instanceof时,会默认用执行环境B中的Array来进行比较,这样就无法判断出A传递的数据类型是否正确。
三、constructor
constructor是指数据的构造函数。按照JavaScript的规则,当一个变量被定义后,会为其添加prototype,其中包含了constructor属性,constructor属性的值是对该变量构造函数的引用。因此从原理上来说,constructor是可以判断数据类型的,但实际上它并不实用,原因有以下两点:
- null和undefined在JavaScript中无效对象,不存在constructor。
- 因为JavaScript是灵活数据类型,所以JavaScript是允许开发者重写prototype的,一旦被重写后,constructor也就没有作用了。
四、Object.prototype.toString.call()
这一方法实际上是对被操作数调用Object的toString方法,应为Object的toString()方法默认会返回当前对象的类。其他数据类型自身的toString方法多少都被重写了。使用Object.prototype.toString.call()返回的结果如下:
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ;// [object Boolean]
Object.prototype.toString.call(Symbol());//[object Symbol]
Object.prototype.toString.call(undefined) ;// [object Undefined]
Object.prototype.toString.call(null) ;// [object Null]
Object.prototype.toString.call(newFunction()) ;// [object Function]
Object.prototype.toString.call(newDate()) ;// [object Date]
Object.prototype.toString.call([]) ;// [object Array]
Object.prototype.toString.call(newRegExp()) ;// [object RegExp]
Object.prototype.toString.call(newError()) ;// [object Error]
Object.prototype.toString.call(document) ;// [object HTMLDocument]
Object.prototype.toString.call(window) ;//[object global] window 是全局对象 global 的引用
上一篇: Zend Framework 入门(4)—页面布局
下一篇: JavaScript数据类型检测
推荐阅读
-
直击JavaScript全栈教程
-
JavaScript Undefined,Null类型和NaN值区别_基础知识
-
Chrome中模态对话框showModalDialog返回值问题的解决方法_javascript技巧
-
JavaScript数组和字符串的操作方法
-
javascript nan什么意思
-
JavaScript confirm选择判断_javascript技巧
-
Bootstrap每天必学之js插件_javascript技巧
-
js实现完美兼容各大浏览器的人民币大小写相互转换_javascript技巧
-
如何使用JavaScript获取单选按钮的选择状态
-
javascript - 有类似于jquery之家的前端页面分享网站吗?