关于instanceof的疑问?

代码如下:

var ck=new String('aaaa')
ck instanceof Object   true
//////////////
var str='aaaa'
str instanceof Object   false

为什么第二个会显示false?这两个不都是字符串吗?

阅读 3.4k
5 个回答

JavaScript 中的数据有基础类型和包装对象的两种概念。基础类型是使用字面量声明是直接创建,包装对象就是使用 new String() 构造函数来创建实例的方式,不论是哪种数据类型的构造函数它们返回后都是个对象。
基础类型的数据在程序中大多数情况都会被转换成包装对象,例如字符串的length属性及其他继承原型的方法或条件判断中的那些比较运算。之所以能使用这些原型继承方法和属性或进行不同类型数据间比较运算就是因为在运算过程中 JS 把它们先包装成对象,然后调用各种方法和属性来进行运算的。

可能是因为字符串字面量是基本类型吧

str = 'aaaa' 或 str = String('aaaa')定义的变量是基本类型,但通过new String创建出来的是对象类型,所以他们不一样。

新手上路,请多包涵

首先, instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置
str='aaaa', str instanceof Object; str 是基本类型【string】,所以得到的结果是false

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题