JavaScript权威指南(第6版) --- 自学笔记(10) --- 全局对象、包装对象

全局对象
全局对象的属性是全局定义的符号,js程序可以直接使用,当js解释器启动(或者WEB浏览器加载新页面)时,它将创建一个新的全局对象,并给它一组定义的初始属性:

// 全局属性,例如:undefined, Infinity, NaN
// 全局函数,例如:isNaN(), parseInt(), eval()
// 构造函数,例如:Date(), RegExp(), String(), Object(), Array()
// 全局对象,例如:Math, JSON

虽然全局对象的初始属性不是保留字,但应该当保留字来对待。 
更多可以参考:http://www.w3school.com.cn/jsref/jsref_obj_global.asp

包装对象
js对象是一种复合值,它是属性或者已命名值得集合。
通过"."符号来引用属性值。当属性值是一个函数时,我们称之为方法。通过obj.m()来掉用obj对象中的方法。

看如下示例:

var str = "hello world!";
var world = str.substring(str.indexOf(" ") + 1, str.length);
console.log(world); // world!

上面,字符串既然不是对象,它为什么会有属性呢? 
实际上,只要引用了字符串的属性,js就会将字符换值通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会被销毁。(其实在实现上并不一定创建或者销毁这个临时对象) 

数字和布尔值也有各自转换成对应的包装对象的方法:Number() 和 Boolean()。
null 和 undefined 没有包装对象,访问他们的属性时,会提示错误。

我们看下面的示例:

var s = "test";
s.len = 4;
var t = s.len;
console.log(t); // undefined

这段代码运行结果,t是undefined,为什么?
第二行代码运行时,创建了一个临时字符串对象,并且为这个字符串对象的len赋值为4,随即又销毁了该字符串对象,
第三行代码,又通过原始的字符串创建了一个新的字符串,并尝试读取len属性,所以最终取得undefined。
这段代码说明:我们在读取字符串(数字、布尔值也一样)的属性值或方法的时候,表现的像和对象一样,但是如果试图给它的属性赋值时,则会忽略这个操作,修改只发生在了临时对象身上,而这个临时对象并没有继续保留下来。

存取字符串,数字或者布尔值的属性时创建的临时对象称作为包装对象
我们可以通过String(),Number(),Boolean()显示的创建包装对象。
js会在必要时将包装对象转换成原始值,
"=="运算符将包装对象和原始值视为相等,而"==="全等运算符将他们视为不等。
通过typeoof运算符可以看到原始值和包装对象的不同。

var s1 = "111";
var s2 = new String("111");
console.log(typeof(s1)); // string
console.log(typeof(s2)); // object
console.log(s1 == s2); // true
console.log(s1 === s2); // false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值