js中typeof 和 instanceof 的理解

图片描述

如图 明明是一个string类型 为什么最后会输出false呢?

阅读 3.9k
4 个回答

a instanceof String 的真实意义是判断String是否在a的原型链上。如果字符串是用var a = new String('123')这种方式声明的话,String一定在a的原型链上。

var a = '123'这个变量a属于一个字面量字符串,而不是真正的由String构造函数new出来的字符串。

你可以在字符串字面值上使用字符串对象的所有方法——JavaScript会自动将字符串字面值转换为一个临时字符串对象,调用该方法,然后废弃掉那个临时的字符串对象。你也能用对字符串字面值使用类似String.length的属性。

具体你可以看看MDN关于String类型以及字面量的解释:

https://developer.mozilla.org...

https://developer.mozilla.org...

a只是一个以string为数据类型的值,但并不属于String对象的实例


var a= new String('aaa')
console.log(a instanceof String) //true 

typeof 操作符返回一个表示数据类型的字符串,可以区分简单数据类型和引用类型(null 除外)
instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象的原型链中
这里的变量 a 是一个直接定义赋值的字符串,属于原始值, 所以使用 instanceof 操作符肯定是 false

var a = new String('abc')

a instanceof String  // true

刚看完《编写可维护的JavaScript》,书中建议:

  • typeof 只用来检测基本类型和函数。
  • instanceof 只用来检测自定义类。
  • 其他引用类型,使用 Object.prototype.toString.call 来判断。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题