您的位置:首页 > Web前端 > JavaScript

JavaScript判断数据类型的方法

2020-06-11 04:32 736 查看

本文将介绍在JavaScript中几种判断数据类型的方法。

1. typeof

用typeof对基本数据类型进行判断

typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof null //返回类型错误,返回Object

用typeof对复杂数据类型进行判断

typeof [] // 'object'
typeof {} // 'object'
typeof console.log // 'function'

除了函数,typeof对复杂数据类型都会返回一个对象,不能准确判断变量是什么类型。

2. instanceof

语法格式为:A instanceof B,如果A是B的实例,则返回true,否则返回false

var str = 'Hello World'
str instanceof String //false

var str1 = new String('Hello world')
str1 instanceof String //true

instanceof操作符判断str1对象的原型链上是否有String这个构造函数的prototype属性,判断str1是否是String构造函数的实例对象,最后返回布尔值,这个判断对整个原型链上的对象都是有效。因此,instanceof只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

3. constructor

实例对象都有constructor属性,当函数被定义时,JS引擎会为函数添加原型prototype,这个prototype中的constructor属性会指向函数引用,因此,重写prototype会丢失原来的constructor。

'Hello World'.constructor == String //true
[].constructor == Array //true
new Date().constructor == Date //true

但是,null和undefined没有constructor属性,用本方法无法判断数据类型。其次,如果自定义对象,开发者重写prototype之后,原有的constructor会丢失,因此,为了规范开发,在重写对象原型是一般都需要重新给constructor赋值,以保证对象实例的类型不被篡改。

4. toString

Object有一个原型方法toString(),该方法的返回值是当前对象的class。这是一个内部属性,格式为[Object 对象类型]。对于Object对象,直接调用本方法就能返回[Object Object],对于其他对象,要通过call/apply才能返回正确的数据类型。

Object.prototype.toString.call('') ;   // [object String]
Object.prototype.toString.call(1) ;    // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]

let str = 'Hello World'
Object.prototype.toString(str); // [object Object]

总的来说,toString是最能准确判断数据类型的方法。

本文有部分解释转载于网络。点击查看原文

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: