JavaScript包装对象使用详解

 更新时间:2015年07月09日 09:05:58   投稿:hebedich  
javascript代码运行的过程中基本类型会找到对应的包装对象,然后包装对象把所有的属性和方法给了基本类型,然后包装对象被系统进行销毁,所以理解了包装对象可以很好的理解之前写的代码为什么可以这样做了。

  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"

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

相关文章

  • 如何用JS将base64图片压缩至指定大小

    如何用JS将base64图片压缩至指定大小

    在开发中通常在上传图片时,由于各种限制,需要将上传的图片压缩到某一大小范围内才能上传,这篇文章主要介绍了如何用JS将base64图片压缩至指定大小的相关资料,需要的朋友可以参考下
    2025-04-04
  • JavaScript中Array功能方法详解

    JavaScript中Array功能方法详解

    Array 对象是前端开发中使用频率最高的数据结构之一,今天我们来复习一下它的几种操作方法,find(),some()和filter(),通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 基于JS实现蜘蛛侠动作游戏的示例代码

    基于JS实现蜘蛛侠动作游戏的示例代码

    这篇文章主要介绍了如何利用JavaScript实现简单的蜘蛛侠动作游戏,文中的示例代码讲解详细,对我们学习JavaScript游戏开发有一定的帮助,需要的可以参考一下
    2022-06-06
  • JavaScript实现拖动滑块拼图验证功能(html5、canvas)

    JavaScript实现拖动滑块拼图验证功能(html5、canvas)

    这篇文章主要介绍了JavaScript实现拖动滑块拼图验证(html5、canvas),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • JavaScript枚举选择jquery插件代码实例

    JavaScript枚举选择jquery插件代码实例

    这篇文章主要介绍了JavaScript枚举选择jquery插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

    关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

    mouseover ,mouseout ,mouseenter,mouseleave,都是鼠标点击而触发的事件,各自代表什么意思,有哪些区别呢?下面跟着脚本之家小编一起看看吧
    2015-10-10
  • 微信端开发--登录小程序步骤

    微信端开发--登录小程序步骤

    本篇文章主要介绍了微信端开发--登录小程序步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 微信小程序 组件的外部样式externalClasses使用详解

    微信小程序 组件的外部样式externalClasses使用详解

    这篇文章主要介绍了微信小程序里 组件的外部样式externalClasses使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • js实现跨域访问的三种方法

    js实现跨域访问的三种方法

    这篇文章主要介绍了js实现跨域访问的三种方法,包括基于iframe实现跨域、基于script标签实现跨域以及后台代理方式 ,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 轻松实现Bootstrap图片轮播

    轻松实现Bootstrap图片轮播

    这篇文章主要介绍了全面解析Bootstrap图片轮播效果,Bootstrap提供了carousel插件,实现图片轮播非常方便,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论