Open a7650 opened 5 years ago
JS总共有7种类型,分别是string,number,null,undefined,boolean,symbol以及object,除了最后一个object是复杂类型其余全是基本类型。
判断类型的函数主要有:typeof ,instanceof,constructor,Object.prototype.toString.call(),Array.isarray()
typeof返回的值可能是 string,number,undefined,boolean,symbol,以及object和function,且均是字符串
null,array,date等均返回object,所以用typeof来检测一个数据是否为对象类型不是很精确。 另 typeof Number(1) === 'number'; typeof new Number(1) === 'object';因为使用new的时候会返回一个对象
object
instanceof用来判断某一个对象是否是一个构造函数的实例,或者在该对象的原型链上是否存在一个构造函数,用法 object instanceof constructor ,该方法一般用来判断对象,如果直接传入数字,字符串等会返回false,但是用基本包装类型可以判断,如 var a = new Number(1)这里的a就是构造函数Number的实例,可以用instanceof判断。 另外,虽然用typeof null 返回的是对象,但是如果null instanceof Object的话,返回的是false, 这是因为虽然null是对象(这是js的一个bug,null是一个类型,所以它应该是null类型),但是null却不是Object的实例,原型链最上面是Object.prototype,所有的object类型都继承这里的原型方法,但是Object.prototype的上面是null,null才是原型链的最顶层,即Object.prototype.__proto__===null。 undefined instanceof Undefined 和 null instanceof Null也都会返回false,因为Undefined 和Null都不是构造函数。
object instanceof constructor
var a = new Number(1)
null instanceof Object
Object.prototype.__proto__===null
undefined instanceof Undefined 和 null instanceof Null
constructor存在于一个对象的原型中,
该方法用来检测object比较准确,用Object原型的toString方法而不用具体实例的方法(如“str”.toString())是因为object所有类型(以上七种),(Array,Function,Date等均为Object的下层类型)以及基本包装类型(Number,String,Boolean),均重写了适应本数据类型的toString方法。 该方法判断任何内置类型均会返回正常的值,但是自定义类型不能判断出来,还是[object Object] 该方法判断原生JSON对象也会返回正确的。
*判断一个数据是否为null可以①直接x===null,② Object.prototype.toString.call
JS总共有7种类型,分别是string,number,null,undefined,boolean,symbol以及object,除了最后一个object是复杂类型其余全是基本类型。
判断类型的函数主要有:typeof ,instanceof,constructor,Object.prototype.toString.call(),Array.isarray()
typeof
typeof返回的值可能是 string,number,undefined,boolean,symbol,以及object和function,且均是字符串
null,array,date等均返回
object
,所以用typeof来检测一个数据是否为对象类型不是很精确。 另 typeof Number(1) === 'number'; typeof new Number(1) === 'object';因为使用new的时候会返回一个对象instanceof
instanceof用来判断某一个对象是否是一个构造函数的实例,或者在该对象的原型链上是否存在一个构造函数,用法
object instanceof constructor
,该方法一般用来判断对象,如果直接传入数字,字符串等会返回false,但是用基本包装类型可以判断,如var a = new Number(1)
这里的a就是构造函数Number的实例,可以用instanceof判断。 另外,虽然用typeof null 返回的是对象,但是如果null instanceof Object
的话,返回的是false, 这是因为虽然null是对象(这是js的一个bug,null是一个类型,所以它应该是null类型),但是null却不是Object的实例,原型链最上面是Object.prototype,所有的object类型都继承这里的原型方法,但是Object.prototype的上面是null,null才是原型链的最顶层,即Object.prototype.__proto__===null
。undefined instanceof Undefined 和 null instanceof Null
也都会返回false,因为Undefined 和Null都不是构造函数。constructor
constructor存在于一个对象的原型中,
Object.prototype.toString.call
该方法用来检测object比较准确,用Object原型的toString方法而不用具体实例的方法(如“str”.toString())是因为object所有类型(以上七种),(Array,Function,Date等均为Object的下层类型)以及基本包装类型(Number,String,Boolean),均重写了适应本数据类型的toString方法。 该方法判断任何内置类型均会返回正常的值,但是自定义类型不能判断出来,还是[object Object] 该方法判断原生JSON对象也会返回正确的。
*判断一个数据是否为null可以①直接x===null,② Object.prototype.toString.call