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 相关文章推荐
javascript new一个对象的实质
Jan 07 Javascript
Exjs 入门篇
Apr 07 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
微信小程序新增的拖动组件movable-view使用教程
May 20 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
基于JavaScript实现幸运抽奖页面
Jul 05 Javascript
vue中使用v-for时为什么不能用index作为key
Apr 04 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
Laravel5中contracts详解
2015/03/02 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
input的focus方法使用
2010/03/13 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
js实现下拉框二级联动
2018/12/04 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
浅谈Python数据类型之间的转换
2016/06/08 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python多进程控制学习小结
2018/10/31 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
软件测试笔试题
2012/10/25 面试题
素质拓展感言
2014/01/29 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
Java tomcat手动配置servlet详解
2021/11/27 Java/Android