typeof和construct区别?

 

平时调试的时候经常需要用到打印出数据的类型,之前常用的是typeof基本可以解决问题,但是有一次打印的时候发现一个数组对象打印类型的时候打印的是object,如下:

let fruit = ["apple","pine","orange","banana"];
console.log("typeof(fruit)-----"+typeof(fruit));
//typeof(fruit)-----object

但实际我想看到的array,所以可以用constructor来查看,如下:

let fruit = ["apple","pine","orange","banana"];
console.log("typeof(fruit)------"+typeof(fruit));
console.log("fruit.constructor------"+fruit.constructor);
//typeof(fruit)------object
//fruit.constructor------function Array() { [native code] }

后面了解了一下两者的区别:

  • 使用typeof可以确定的JavaScript的变量类型如下:
变量   数据类型
typeof(“bill”) string
typeof(3.14) number
typeof(NaN) number
typeof(false) boolean
typeof([0,2,3,1,2]) object
typeof({name:‘bill’,age:16}) object
typeof(new Date()) object
typeof(function(){}) function
typeof(mycar) undefined
typeof(null) object
  • 使用constructor属性返回所有JavaScript变量的构造函数
变量   数据类型
‘bill’.constructor String()
3.14.constructor Number()
false.constructor Boolean()
[0,1,2,3,4].constructor Array()
{name:‘bill’,age:16}.constructor Object()
(new Date()).constructor Date()
(function(){}).constructor Function()

//所以实际上不止数组,还有日期,用typeof是判断不出来的,用构造器是可以的,百度得知constructor在类继承时会有问题,因为涉及不多所以就不记录了

总结:通常情况下用typtof判断就可以了,可根据情况选择constructor或者instanceof或者prototype,prototype胜在通用但是比较繁琐,一般不用

上一篇:android--------解决Entities and POJOs must have a usable public constructor


下一篇:简易版的 Spring 之如何实现 Constructor 注入