js类型判断的几种方法
程序员文章站
2024-01-10 14:24:16
...
js类型判断的几种方法
/** JS中 判断一个变量类型的几种方式 * 1. typeof 没法区分对象类型. 数组, object * 2. Object.prototype.toString.call() * 3. instanceof * 4. constructor */
要说到 JS 类型判断的几种方式, 我们就需要知道 JS 有哪些数据类型
# ES5阶段, 数据类型有6 种: string, boolean, number, null, undefined, object # es6 新增了 Symbol # 所以 JS 数据类型有 string, Boolean, number, null, undefined, object, symbol
typeof 操作符
typeof 操作符判断变量类型一般主要用来检测基本数据类型
typeof "123" => "string" typeof false => "boolean" typeof 123 => "number" typeof undefined => "undefined" # --------------------------------- typeof null => "object" typeof {} => "object" typeof [] => "object" // 所以我们看到, 当 typeof 操作符, 返回是 object 的时候, 变量可能是 null 和 数组,这种情况我们要注意, 尤其 typeof null = "object" #----------------------------------- typeof function(){} ==> "function"
Object.prototype.toString.call() 方法
每个对象都有一个
toString()
方法, 默认情况下,toString()
方法被每个Object
对象继承。如果此方法在自定义对象中未被覆盖,toString()
返回 “[object type]”,其中type
是对象的类型。(上述文字来自于MDN Object.prototype.toString()方法介绍) 代码介绍如下:var o = new Object(); Object.prototype.toString.call(o) // returns "[object Object]"
???? MDN 上也有关于使用
Object.prototype.toString
方法进行对象的类型检测说明.Object.prototype.toString.call("Gene") // "[object String]" Object.prototype.toString.call(true) // ""[object Boolean]" Object.prototype.toString.call(4) // "[object Number]" Object.prototype.toString.call(null) // "[object Null]" Object.prototype.toString.call(undefined) // "[object Undefined]" Object.prototype.toString.call({}) // "[object Object]" Object.prototype.toString.call(function(){}) // "[object Function]" Object.prototype.toString.call([]) // "[object Array]" Object.prototype.toString.call(/\w/) // "[object RegExp]" Object.prototype.toString.call(Dog) // "[object Function]" # 注意: MDN上有说过, Date 对象直接调用的时候, 返回的是 #字符串#. Object.prototype.toString.call(new Date) // "[object Date]" Object.prototype.toString.call(Date()) // "[object String]"
instanceof 操作符
MDN:
用法:
object instanceof constructor
描述:
instanceof
运算符用来检测constructor.prototype
是否存在于参数object
的原型链上。// 从MDN上我们可以得知, instanceof 主要用来检测引用类型. 它用来判断, 当前的 constructor 构造函数, 是否在 object 实例的原型链上, 存在就是 true. 不存在就是 false let obj = {}; console.log(obj instanceof Object); // true let arr = [] console.log(arr instanceof Array); // true let fn = function() {}; console.log(fn instanceof Function); // true
constructor 构造函数
js中,函数定义的时候, js引擎会为这个函数添加一个
prototype
属性,prototype
属性是一个对象, 我们称之为原型对象.原型对象
prototype
上有一个constructor
属性, 这个属性指向函数本身. 这就是我们所说的constructor
构造函数// ''.constructor==String // => true false.constructor==Boolean true.constructor==Boolean // => true new Number(1).constructor ==Number // => true [].constructor==Array // true