如何判断JavaScript的数据类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何判断JavaScript的数据类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2837字,纯文字阅读大概需要5分钟。
内容图文
![如何判断JavaScript的数据类型?](/upload/InfoBanner/zyjiaocheng/1295/cabdc94070304ae4b6ba563b62fa043c.jpg)
JavaScript
数据类型
本文将讲解我目前所知道的判断JavaScript
数据类型的方法。
JavaScript
数据类型一共有7
种:
- Undefined
- Null
- Boolean
- String
- Symbol
- Number
- Object
除了Object
之外的6
种属于原始数据类型。有时,我们还会细分Object
的类型,比如Array
,Function
,Date
,RegExp
等。
判断JavaScript
数据类型:
typeof
1 typeof undefined // "undefined"2typeofnull// "object"3typeof 1 // "number"4typeof "1" // "string"5typeof Symbol() // "symbol"6typeoffunction() {} // "function"7typeof {} // "object"
问题一:typeof
不能识别null
,如何识别null
?
答案:如果想要判断是否为null
,可以直接使用===
全等运算符来判断(或者使用下面的Object.prototype.toString
方法):
1 let a = null2 a === null// true
问题二:typeof
作用于未定义的变量,会报错吗?
答案:不会报错,返回"undefined"。
1 typeof randomVariable // "undefined"
问题三:typeof Number(1)
的返回值是什么?
答案:"number"
。注意Number
和String
作为普通函数调用的时候,是把参数转化为相应的原始数据类型,也就是类似于做一个强制类型转换的操作,而不是默认当做构造函数调用。注意和Array
区分,Array(...)
等价于new Array(...)
。
1 typeof Number(1) // "number"2typeof String("1") // "string"34 Array(1, 2, 3) 5// 等价于6new Array(1, 2, 3)
问题四:typeof new Number(1)
的返回值是什么?
答案:"object"
。
1 typeof new Number(1) // "object"2typeofnew String(1) // "object"
instanceof
instanceof
不能用于判断原始数据类型的数据:
3 instanceof Number // false ‘3‘ instanceof String // falsetrueinstanceof Boolean // false
instanceof
可以用来判断对象的类型:
1 var date = new Date() 2 date instanceof Date // true34var number = new Number() 5 number instanceof Number // true67var string = new String() 8 string instanceof String // true
需要注意的是,instanceof
的结果并不一定是可靠的,因为在ECMAScript7
规范中可以通过自定义Symbol.hasInstance
方法来覆盖默认行为。详情参见ECMAScript7规范中的instanceof操作符。
Object.prototype.toString
1 Object.prototype.toString.call(undefined).slice(8, -1) // "Undefined"2 Object.prototype.toString.call(null).slice(8, -1) // "Null"34 Object.prototype.toString.call(3).slice(8, -1) // "Number"5 Object.prototype.toString.call(new Number(3)).slice(8, -1) // "Number"67 Object.prototype.toString.call(true).slice(8, -1) // "Boolean"8 Object.prototype.toString.call(‘3‘).slice(8, -1) // "String"9 Object.prototype.toString.call(Symbol()).slice(8, -1) // "Symbol"
由上面的示例可知,该方法没有办法区分数字类型和数字对象类型,同理还有字符串类型和字符串对象类型、布尔类型和布尔对象类型。
另外,ECMAScript7
规范定义了符号Symbol.toStringTag
,你可以通过这个符号自定义Object.prototype.toString
方法的行为:
1 ‘use strict‘ 2var number = new Number(3) 3 number[Symbol.toStringTag] = ‘Custom‘ 4 Object.prototype.toString.call(number).slice(8, -1) // "Custom" 5 6function a () {} 7 a[Symbol.toStringTag] = ‘Custom‘ 8 Object.prototype.toString.call(a).slice(8, -1) // "Custom" 910var array = [] 11 array[Symbol.toStringTag] = ‘Custom‘ 12 Object.prototype.toString.call(array).slice(8, -1) // "Custom"
因为Object.prototype.toString
方法可以通过Symbol.toStringTag
属性来覆盖默认行为,所以使用这个方法来判断数据类型也不一定是可靠的。
Array.isArray
Array.isArray(value)
可以用来判断value
是否是数组:
Array.isArray([]) // true Array.isArray({}) // false (function () {console.log(Array.isArray(arguments))}()) // false
总结
本文讲解了我目前所知道的判断JavaScript
数据类型的方法,希望大家能有所收获。
原文:https://www.cnblogs.com/Best-Chen/p/9739487.html
内容总结
以上是互联网集市为您收集整理的如何判断JavaScript的数据类型?全部内容,希望文章能够帮你解决如何判断JavaScript的数据类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。