js的instanceof和包装对象的问题,进来看一下

clipboard.png
为什么会是这个结果,直接声明的字符串和new的有什么区别,为什么s new的字符串用instanceof检测即是Object又是String呢

阅读 1.7k
2 个回答
直接声明的字符串和new的有什么区别

一个是字面量的字符串
一个是String类型的实例,valueOf会返回字面量的字符串,所以'a' !== new String('a'),但是'a' == new String('a')'a' === new String('a').valueOf()

为什么s new的字符串用instanceof检测即是Object又是String

因为String继承自ObjectString instanceof Object

还记得JS原型链机制么?通过new String出来的字符串是继承String对象的,String又是继承Object对象的,所以后面的s instance Object | String 都为true。
JS中有值类型和引用类型这两种数据类型,通过字面量创建出来的s他是直接赋予值'hello'的,所以它属于值类型,'hello'就是一个普通的常量是不继承于任何对象的,所以s instance Object为false。
需要注意的是基础类型中只有number boolean string可以通过值传递,var obj = {};依然是一个引用类型。

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