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 相关文章推荐
做网页的一些技巧
Feb 01 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
Bootstrap表单布局
Jul 19 Javascript
JavaScript重定向URL参数的两种方法小结
Oct 19 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
Sep 28 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
使用pm2部署node生产环境的方法步骤
Mar 09 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 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中使用正则表达式进行查找替换
2013/06/13 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jquery搜索框效果实现方法
2015/01/16 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
js实现3D旋转相册
2020/08/02 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python raise的基本使用
2020/09/10 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
六一亲子活动总结
2014/07/01 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
房产授权委托书范本
2014/09/22 职场文书
简单租房协议书
2014/10/21 职场文书
2014年学生会工作总结
2014/11/07 职场文书
工程部主管岗位职责
2015/02/12 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
安全生产会议制度
2015/08/06 职场文书
python基础之类方法和静态方法
2021/10/24 Python
MySQL分区路径子分区再分区
2022/04/13 MySQL
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL