JavaScript包装对象使用详解


Posted in Javascript onJuly 09, 2015

JavaScript对象是一种复合值:它是属性和已命名值的集合。通过"."符号来引用属性值。当属性值是一个函数时,称为方法。

①一段你常用但却未必明白其真正底层原理的代码:

var s = "hello world!";
var word = s.substring(s.indexOf(" ")+1,s.length);

如前面所说,这里变量s只是一个字符串原始类型,它怎么会有属性(s.length)和方法(s.indexOf()、s.substring())呢?没错,这正跟我们正要介绍的包装对象有关。原因是:只要引用了字符串s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串(String)对象的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会被销毁。

同字符串一样,数字和布尔值也有各自的方法:通过Number()和Boolean()构造函数创建一个临时对象。存取字符串、数字或布尔值的属性时创建的临时对象就是包装对象。5种原始类型中的剩余两种null和undefined没有包装对象:访问它们的属性会造成一个类型错误(Uncaught TypeError)。明白了上面的代码,那么再看如下代码:

var s = "test";
s.len = 4;//给它设置一个属性
var t = s.len;

不认真的同学这里就会认为最后t就是等于4了。难道最后t不等于4吗?是的,最后t的值是undefined。想知道为什么请看继续看解析:原来以这里第二行代码只是创建了一个临时字符串对象,并给len属性赋值为4,随即销毁这个对象。而第三行又是通过原始字符串s创建一个新字符串对象(这个不是第二行代码创建的对象,第二行代码创建的对象已经被销毁了)并尝试读取其len属相,这个属性自然不存在,因此表达式的结果为undefined。这段代码说明了在读取字符串、数字和布尔值的属性值或方法(实际上是它们对应包装对象的属性值或方法)表现的像对象一样。但如果你试图给属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并不会继续保留下来。

注意:可通过String(),Number(),Boolean()构造函数来显示创建包装对象:

var s = "test",n=1,b=true;//一个字符串、数字和布尔值
var S = new String(s);//一个字符串对象
var N = new Number(n);//一个数值对象
var B = new Boolean(b);//一个布尔对象

JavaScript会在必要时将包装对象转换成原始值,因此上段代码中的对象S、N和B常常但不总是表现的和值s、n和b一样。"=="等于运算符将原始值和其包装对象视为相等,但“===”全等运算将它们视为不等。通过typeof运算符也可以看到原始值和其包装对象的不同:

①typeof(s);
->"string"


 typeof(S);
->"object"


②typeof(n);
->"string"


 typeof(N);
->"object"


③typeof(b);
->"string"


 typeof(B);
->"object"

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
artDialog双击会关闭对话框的修改过程分享
Aug 05 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
JS中mouseover和mouseout多次触发问题如何解决
Jun 06 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
20行js代码实现的贪吃蛇小游戏
Jun 20 Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
jquery.pager.js实现分页效果
Jul 29 jQuery
JavaScript组合模式---引入案例分析
May 23 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 #Javascript
jQuery实现tab选项卡效果的方法
Jul 08 #Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 #Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 #Javascript
详细分析JavaScript变量类型
Jul 08 #Javascript
js实现图片点击左右轮播
Jul 08 #Javascript
javascript获取重复次数最多的字符
Jul 08 #Javascript
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
javascript的函数
2007/01/31 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
用python登录Dr.com思路以及代码分享
2014/06/25 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python3下载抖音视频的完整代码
2019/06/05 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
django 信号调度机制详解
2019/07/19 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
J2EE模式面试题
2016/10/11 面试题
超市创业计划书
2014/09/15 职场文书
无房证明范本
2014/09/17 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript