javascript的包装对象、全局对象

本文深入探讨JavaScript中的全局对象和包装对象概念。全局对象在JS解释器启动时创建,包含预定义的全局属性和函数,如undefined、Infinity及构造函数。包装对象用于处理原始数据类型,如字符串、数字和布尔值,通过构造函数如String()和Number()临时转换为对象以调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、全局对象

全局对象指的是js解释器在启动的时候,创建的一个全局的对象,并给他一组初始属性,全局对象的属性是全局定义的符号,js可以直接调用。

他的初始属性有:

      全局属性,比如undefined、Infinity、NaN等

      全局函数,比如isNaN(),parseInt()

      构造函数,Date()、RegExp()、String()等等

      全局对象JSON的的序列化等(这个和函数有点不同,是把值放在序列化的括号里)

当然如果用浏览器来运行js脚本的话,Window对象(也就是Window端全局对象)定义了一些额外的全局属性。

在代码的最顶级,用this引用全局对象;

      var  global = this;

如果是window端的话,可以用window属性引用Window对象自身。

预定义的时候,全局对象定义了预定义的全局值,每声明一个全局变量,就是增加了全局对象的一个属性。

2、包装对象

我们都知道js有两种数类型,原始数据类型和对象数据类型。

针对于对象数据类型,我们通过.的方式引用他的属性。

而当属性是一个函数的时候,我们称这个属性为这个对象的方法,通过o.m()来进行调用。

我们知道字符串、数字、和布尔值都是原始的数据类型,但js中对于这些原始的数据类型也有一些方法进行调用

它通过的方法是,构造一个临时的对象、也叫包装对象。

那么,它是怎么实现的呢?

调用了全局对象的构造函数属性,众所周知,全局对象的属性是全局定义的符号,js程序可以直接使用,比如我们常常用的NaN全局属性,全局函数属性parseInt()等等,那么构造函数也是可以调用的。

而我们只要调用了原始数据类型s的属性,js就会把字符串通过调用new String(s)这样一个构造函数转化为对象,这个对象会继承字符串的方法(我对这儿的理解是,String()包装成的对象继承构造函数自带有的自有属性方法),创建的对象继承了构造函数的方法,不然原本的字符串是原始数据类型,根本没有属性可以继承。

在创建包装对象之后,这个对象被用来处理对象的引用,一旦引用结束,这个新创建的包装对象就会被销毁。

同样的,数字和布尔值也有各自的方法,并通过Number()和Boolean()构造函数创建临时对象

而null和undefined没有包装对象,访问他们的属性会造成类型错误。

看一个题:

      var s = "test";//创建一个字符串

      s.len = 4;//给它设置一个属性

      var t = s.len;//查询这个属性

运行之后我们会发现,t的值为undefined;

因为第二行在创建完属性之后并负责,对象就销毁了,之后根本查不到这个对象的属性。

也就是说,不要试图给包装对象的属性赋值,那都是无用功。他们的属性都是只读的,我们也只是用他们只读的属性。

我们也可以自己创建包装对象:

      var s = “test”;

      var S = new String();

在比较时:s和S用等于=是相等的,但用全等===是不等的。用typeof运算符可以看出他们的不用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值