Javascript中String()和new String()的区别——JS的包装对象
最近在看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的包装对象的更多相关文章
- JavaScript中object和Object有什么区别
JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢 ————————————————————— ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- JavaScript中值类型和引用类型的区别
JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和布尔值.此外,JavaScript中还有两个特殊的原始值:null和undefined,它们既不是数字也不 ...
- JavaScript中=、==、===以及!=、!==的区别与联系
JavaScript中=.==.===以及!=.!==的区别与联系 在JavaScript中,“=”代表赋值操作:“==”先转换类型再比较,“===”先判断类型,如果不是同一类型直接为false. ...
- 关于javascript中apply()和call()方法的区别
如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语 ...
- javascript 中 offsetWidth,clientWidth;offsetHeight,clientHeight的区别
javascript 中 offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变 clientWidth.offsetWidth.clientHeight区别IE6.0.FF ...
- 在 JavaScript 中 prototype 和 __proto__ 有什么区别
本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...
- javascript中的undefined与null的区别
一.相似性 在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别. var a = undefined; var a = null; 上面代码中,a变量分别被赋值 ...
- javascript中常见undefined与defined的区别
在JavaScript中相信“undefined”与“defined”对大家来说都肯定不陌生,但是又不是很清楚它们的区别,先看两个demo我们再说, 例1. console.log(parms); / ...
随机推荐
- webapck imports-loader和exports-loader的使用
webapck imports-loader和exports-loader的使用
- T-shirt
题目描述 JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-shi ...
- mysql操作命令梳理-grant授权和revoke回收权限
在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke:grant授权格式:grant 权限列表 o ...
- nginx+php+扩展件安装实践版
一.安装各种软件包 yum -y install wget git vim lrzsz unzip zip gcc make gd-devel bzip2 bzip2-devel libcurl li ...
- wsdl中含ref="s:schema"时处理
转载地址:http://ljhzzyx.blog.163.com/blog/static/38380312201471375946602/
- OpenCL介绍
OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器.桌面 ...
- 为什么前两年大热的VR创业突然冷了?
不得不说,如果不是<头号玩家>在国内的热映,人们似乎都要忘记VR这个行业了.<头号玩家>中那些带有极强真实色彩的游戏,其实就是VR进化的目标,甚至是巅峰!而里面的角色佩戴的设备 ...
- 苹果联合创始人高调宣布弃用Facebook是什么梗?
这段时间,扎克伯格非常郁闷.泄密丑闻不仅让Facebook股价大跌.引来审查等,还被众多互联网.科技大佬批判.孤立.如,"钢铁侠"马斯克就直接删除了SpaceX 和特斯拉的 Fac ...
- Hell World:)
第一次弄博客是在2017年春节,自己弄了个域名,租了个小小的VPS,装好了wordpress,挑了一套模板,就这样上线了,可惜wordpress实在不是一个适合写字的地方,插件.主题令人眼花缭乱,慢慢 ...
- centos7 上安装jira调试系统
安装mysql数据库 在windows上面下载 http://dev.mysql.com/downloads/mysql/ 在liunx系统上可直接wget, wget https://dev.mys ...