判断数据类型的方法
1.typeof
- 语法:
typeof operand || typeof(operand)
operand可以是变量或者表达式
类型 | 返回值 |
---|---|
Number | number |
String | string |
Boolean | boolean |
Undefined | undefined |
Null | object |
Symbol | symbol |
Obejct | object |
Array | object |
Function | object |
其他对象 | object |
2.instanceof
- 语法:
object instanceof constructor
object为实例对象 constructor为构造函数
-
js内置构造函数:
- Array
- Date
- Error
- Function
- Object
- RegExp
-
用途:
- 用来检查object是否为constructor的实例对象
- 可用来判断对象类型
- 不可判断原始类型
- 示例:
var arr=[1,2,3]
console.log(arr instanceof Array) //true
var arr=[1,2,3]
console.log(arr instanceof Object) //true
var reg=/^\d{3,}$/
console.log(reg instanceof RegExp) //true
function Person(){};
var student = new Person();
console.log(peason1 instanceof Person) //true
3.Array.isArray()
- 语法:
Array.isArray()
-
用途:
- 用于检测某变量是否为数组,返回值是Boolean型
- 示例:
var arr = [1,2,3]
Array.isArray(arr) //true
4.Object.prototype.toString.call()
- 语法:
Object.prototype.toString.call()
括号内输入需要判断的内容
同时可以使用slice方法截取返回值
Object.prototype.toString.call().slice(8,-1)
-
用途:
- 用于判断浏览器内置对象
- 可判断所有数据类型
- 返回值是字符串
示例:
Object.prototype.toString.call(1).slice(8,-1) //'Number'
Object.prototype.toString.call('').slice(8,-1) //'String'
Object.prototype.toString.call(true).slice(8,-1) //'Boolean'
Object.prototype.toString.call(undefined).slice(8,-1) //'Undefined'
Object.prototype.toString.call(null).slice(8,-1) //'Null'
Object.prototype.toString.call([]).slice(8,-1) //'Array'
Object.prototype.toString.call({}).slice(8,-1) //'Object'
Object.prototype.toString.call(function(){}).slice(8,-1) //'Function'
Object.prototype.toString.call(new Date).slice(8,-1) //'Date'
5.constructor
- 语法:
object.constructor
-
用途:
- constructor属性返回对象的构造函数
- 且返回值是函数的引用
- 不是函数名
- 示例:
[].constructor === Array //true
Number(1).constructor === Number //true
''.constructor === String //true
new Date().constructor === Date //true
new Error().constructor === Error //true
true.constructor === Boolean //true
-
注意:
- null和undefined没有constructor,这两种类型的数据需要通过其他方式判断
- 同时函数的constructor是不稳定的,这个主要体现在自定义对象上,当开发者重写protype后,原有的constructor引用会丢失,constructor会默认为Object