是a instanceof b确切等于a.constructor === b?
如果没有,请告诉我这些之间的区别.
Don*_*uck 12
SLaks 的回答是正确的,但我想补充一点,它.constructor适用于原始类型,instanceof但不适用于:
"Hello World".constructor == String; //true
"Hello World" instanceof String; //false
Run Code Online (Sandbox Code Playgroud)
第二个条件为假的原因是因为它"Hello World"是一个原始字符串而不是一个对象,所以它不是任何东西的实例。另一方面,在第一种情况下,当将方法(例如 constructor )应用于基本类型时,它会转换为对象。所以首先"Hello World"被转换为new String("Hello World")然后返回new String("Hello World").constructorwhich is String。这对数字和布尔值的工作方式相同。
您也可以typeof在原始类型上使用,但这不适用于对象:
typeof "Hello World"; //"string"
typeof new String("Hello World"); //"object"
Run Code Online (Sandbox Code Playgroud)
因此,如果您正在处理字符串、数字或布尔值并且不需要担心继承问题,则应该使用:
.constructor 如果你想检查变量是字符串、数字还是布尔值,它是原始类型还是对象都没有关系。
还有其他方法可以做到这一点,如typeof foo.valueOf()或(foo instanceof String || typeof foo == "string"),但.constructor最短。但是,如果出于某种原因您有继承的类String,Number或者Boolean您还想检查继承的类型,则更长的方法可能会很有用。
instanceof如果要检查变量是否为String,Number或Booleanobject 而不是原始类型。typeof 如果要检查变量的类型是否是原始类型而不是对象。| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |