js类型判断

JavaScript024

js类型判断,第1张

基本数据类型:Undefined、Null、Boolean、Number、String,Symbol

引用数据类型 :Object

typeof可以识别出基本类型boolean,number,undefined,string,symbol,但是不能识别null。不能识别引用数据类型,会把null、array、object统一归为object类型,但是可以识别出function。

所以typeof可以用来识别一些基本类型。

从结果中看出instanceof不能识别出基本的数据类型 number、boolean、string、undefined、unll、symbol。

但是可以检测出引用类型,如array、object、function,同时对于是使用new声明的类型,它还可以检测出多层继承关系。

其实也很好理解,js的继承都是采用原型链来继承的。比如objA instanceof A ,其实就是看objA的原型链上是否有A的原型,而A的原型上保留A的constructor属性。

所以instanceof一般用来检测对象类型,以及继承关系。

null、undefined没有construstor方法,因此constructor不能判断undefined和null。

但是他是不安全的,因为contructor的指向是可以被改变。

此方法可以相对较全的判断js的数据类型。

至于在项目中使用哪个判断,还是要看使用场景,具体的选择,一般基本的类型可以选择typeof,引用类型可以使用instanceof。

类型推导

对象中的键 是否存在 查询的关键字;与对象中的值无关

格式: 对象变量 instanceof 类名或函数名

返回true的2种条件,符合一个即可

1、对象变量 .__proto__ = 类名或函数名 .prototype

2、对象变量 .__proto__.__proto__...._proto__ = 类名或函数名 .prototype

不相同。这两个变量含有相同的字符序列,但数据类型却不同,前者为string,后者为object,在使用操作符时,JavaScript会尝试各种求值,以检测两者是否会在某种情况下相等。所以下面的表达式结果为true:strA=strB。严格的=,它在求值时不会这么宽容,不会进行类型转换。所以表达式strA=strB的值为false,虽然两个变量持有的值相同。