JavaScript数据类型
js一共有六种数据类型:五种简单数据类型和一种复杂数据类型:
五种简单数据类型包括:String、Number、Boolean、undefined、Null
一种复杂数据类型:obeject
检测数据类型
1.typeof
typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、
string、object、undefined、function 等。
console.log(typeof test)
console.log(typeof '');// string
console.log(typeof 1);// number
console.log(typeof Symbol());// symbol
console.log(typeof true);//boolean
console.log(typeof undefined);//undefined
console.log(typeof null);//object
console.log(typeof [] );//object
console.log(typeof new Function());// function
console.log(typeof new Date());//object
console.log(typeof new RegExp());//object
2.instanceof
instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型,我们用一段伪代码来模拟其内部执行过程:
console.log({} instanceof Object) //true
console.log([1] instanceof Array) //true
console.log([1] instanceof Object) //true
instanceof 能够判断出 [ ] 是Array的实例,但它认为 [ ] 也是Object的实例
console.log([].__proto__) //[]
console.log([].__proto__.__proto__) //{}
console.log(Array.prototype.__proto__) //{}
console.log(Object.prototype.__proto__) //null
从 instanceof 能够判断出 [ ].proto 指向 Array.prototype,而 Array.prototype.proto 又指向了Object.prototype,最终 Object.prototype.proto 指向了null,标志着原型链的结束。因此,[]、Array、Object 就在内部形成了一条原型链
从原型链可以看出,[] 的 proto 直接指向Array.prototype,间接指向 Object.prototype,所以按照 instanceof 的判断规则,[] 就是Object的实例。依次类推,类似的 new Date()、new Person() 也会形成一条对应的原型链 。因此,instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
3.Array.isArray()
Array.isArray() 方法 。该方法用以确认某个对象本身是否为 Array 类型
console.log(Array.isArray([1,3,4,2,4])) //true
4.toString()
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
console.log(Object.prototype.toString.call('')) //object String]
console.log(Object.prototype.toString.call(1)) //[object Number]
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call(Symbol())) //[object Symbol]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call(null)) //[object Null]