最近在看Symbol不能使用new操作符,然后类比到Number,String,Boolean,因为它们同属于基本类型,但是有有所差异:Number,String,Boolean是可以使用new操作符进行实例的输出的。出个题:

var abc = 'abc',
str1 = String(abc),
str2 = new String(abc);
//判断下面输出
str1 === abc //true
str2 === abc //false

这里其实考察的是值类型和引用类型,String()返回的是字符串,即基本类型,而new String()返回的是一个对象,str2是引用存储,值存储 !== 引用存储的。

再来个题目:

var Fun1=function(){
return String('miya');
};
var fun1 = String('miya')
fun1 === new Fun1() //false
fun1 === Fun1() //true

其实下面fun1 === Fun1()   这个肯定是true了,因为返回都是基本类型string,但是new出来的对象就不一样了,它返回的是引用类型了。

存取字符串,数字或者布尔值的属性时创建的临时对象称作包装对象。

var str = "miya",num = 1,boo = true;
var Str = new String(str);
var Num = new Number(num);
var Boo = new Boolean(boo);
console.log(str == Str); //true
console.log(num == Num); //true
console.log(Boo == boo); //true

当使用全等时候str !== Str的,因为前者原始值,后者引用引用类型。使用==时候为true,是因为:Javascript会在必要时候将包装对象转化为原始值。

Javascript中三种基本包装类型:Boolean,Number,String。

当调用str.substring(0)  //"miya",实际上JS内部隐式的帮我们创建了一个包装对象,调用substring方法时候实际过程是:

var a1 = new String("miya");
var a2 = a1.substring(0);
a1 = null;
console.log(a2); //miya

这个是在基本类型string调用属性时候浏览器隐式创建的包装对象。隐式创建的对象,在使用完毕后会被销毁掉。

隐式包装对象和自己显示创建的包装对象差别点在于:

对象的生存周期,你用new操作符创建的引用类型的实例,一直保存在内存中除非手动销毁,而浏览器隐式创建的包装对象只存在于你操作string,boolean,number原始值属性时候,用完即销毁,这样我们就不能手动为基本类型添加属性和方法了。

【完】

书卷多情似故人,晨昏忧乐每相亲。

Javascript中String()和new String()的区别——JS的包装对象的更多相关文章

  1. JavaScript中object和Object有什么区别

    JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 ————————————————————— ...

  2. JavaScript中const、var和let区别浅析

    在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...

  3. JavaScript中值类型和引用类型的区别

    JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...

  4. JavaScript中=、==、===以及!=、!==的区别与联系

    JavaScript中=.==.===以及!=.!==的区别与联系   在JavaScript中,“=”代表赋值操作:“==”先转换类型再比较,“===”先判断类型,如果不是同一类型直接为false. ...

  5. 关于javascript中apply()和call()方法的区别

    如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语 ...

  6. javascript 中 offsetWidth,clientWidth;offsetHeight,clientHeight的区别

    javascript 中 offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变 clientWidth.offsetWidth.clientHeight区别IE6.0.FF ...

  7. 在 JavaScript 中 prototype 和 __proto__ 有什么区别

    本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...

  8. javascript中的undefined与null的区别

    一.相似性 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别. var a = undefined; var a = null; 上面代码中,a变量分别被赋值 ...

  9. javascript中常见undefined与defined的区别

    在JavaScript中相信“undefined”与“defined”对大家来说都肯定不陌生,但是又不是很清楚它们的区别,先看两个demo我们再说, 例1. console.log(parms); / ...

随机推荐

  1. CHI 2013:人机交互领域那些令人兴奋的新技术

    2013:人机交互领域那些令人兴奋的新技术" title="CHI 2013:人机交互领域那些令人兴奋的新技术"> 编者按:CHI是人机交互领域首屈一指的国际盛会, ...

  2. 3.redis kyes命令

    Keys命令 1.1设置key的生存时间 Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁. EXPIRE key seconds         ...

  3. <c:if >标签的坑!!

    <c:if test="${trans.Transition}"> <input id="${trans.nextnode}" type=&q ...

  4. ByteCode Instrumentation

    Bytecode Instrumentation 定义 我们首先来看看,什么叫"Instrumentation"?Instrumentation这个词有很多意思,在维基百科中,它是 ...

  5. 对Java8新的日期时间类的学习(二)

    示例11 在Java中如何判断某个日期是在另一个日期的前面还是后面 这也是实际项目中常见的一个任务.你怎么判断某个日期是在另一个日期的前面还是后面,或者正好相等呢?在Java 8中,LocalDate ...

  6. Mybatis与Spring整合(纯注解)

    java1.5版本之后开始支持注解,spring*2开始提供注解配置方式,到spring**4后spring推荐使用注解配置 IOC注解(主要作用就是在spring容器中声明一个Bean,同xml中的 ...

  7. 为Nginx启用目录浏览功能

    今天工作需要,要给客户提供一个patch的下载地址,于是想用nginx的目录浏览功能来做,需要让客户看到指定一个目录下的文件列表,然后让他自己来选择该下载那个文件: 我们都知道在apache下可以配置 ...

  8. Hadoop什么?

    Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算. Hadoop框架中 ...

  9. 将tomcat注册成windows系统服务方法

    注册服务 打开cmd,进入到[部署tomcat的根目录]Tomcat7.0.65_1/bin,输入  service.bat install  服务名 修改服务名称 比如我注册的 service.ba ...

  10. 极力推荐大佬的java项目的博客

    此次说明:这是我从码云上拉取下来的java项目,仅供试验说明,不做任何获利渠道,若是发现有人拿此做其他用处,需像码云上这位大佬说明,特此感谢!!! 准备工作:     安装 maven,jdk1.8, ...