JS里的对象
本文将从 JavaScript 中的全局对象谈起,再分别介绍Number
、Boolean
、String
、Object
四个对象。
1. 全局对象 window
全局对象:最顶层的对象,ECMAScript 规定全局对象叫做global
,在浏览器环境下是指 window
对象(浏览器里面,window
对象指当前的浏览器窗口)。
全局对象的属性就是全局变量。
这些全局变量分为两种:
Ⅰ. 一种是 ECMAScript 规定的(global
)
global.parseInt
global.parseFloat
global.Number
global.String
global.Boolean
global.Object
Ⅱ. 一种是浏览器自己加的属性(window
)
window.alert
window.prompt
window.comfirm
window.console.log
window.console.dir
window.document
window.document.createElement
window.document.getElementById
2. 包装对象
(1)概述
对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”。
数值、字符串、布尔值相对应的Number
、String
、Boolean
,这三个原生对象可以把原始类型的值变成(包装成)对象。
var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
包装对象的最大目的,①使得 JavaScript 的对象涵盖所有的值,②使得原始类型的值可以方便地调用某些方法。
★划重点:Number
、String
和 Boolean
这三个对象作为构造函数使用(带有new
)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有new
),可以将任意类型的值,转为数值、字符串和布尔值。
(2) 实例方法
以下两种是三种包装对象共同具有、从Object
对象继承的方法:
- valueOf()
valueOf
方法返回包装对象实例对应的原始类型的值。
new Number(123).valueOf() // 123
new String('abc').valueOf() // "abc"
new Boolean(true).valueOf() // true
- toString()
toString
方法返回对应的字符串形式。
new Number(123).toString() // "123"
new String('abc').toString() // "abc"
new Boolean(true).toString() // "true"
3. Number 对象
历史:JavaScript的作者Brendan Eich被公司要求JS要像 Java ,所以他模仿 Java 写了 var n = new Number(1);
这样n
是一个对象,有自己的属性。
但太麻烦,于是他又写了一种 var n =1;
这样 n
虽是基本类型,但他用了一个方法,使这样声明的也可以用 Number
对象的属性。
var n=1;
n.toString(); //n用toString()方法时,本质是下面这两行,实质上n是没有属性的
var temp = new Number(n); //声明了一个临时变量temp,并将n作为Number对象赋给它
temp.toString(); //用temp来执行toString(),执行完后temp就被抹杀了
(1)作为构造函数
Number
对象是数值对应的包装对象,作为构造函数时,它用于生成值为数值的对象。
var n = new Number(1);
typeof n // "object"
上面代码中,Number
对象作为构造函数使用,返回一个值为 1
的对象。
题目:var n=1;
① n.xxx = 2;
会报错吗?
答:不报错
②n.xxx
= ?
答:undefined
,因为xxx是存在临时对象temp里的,但temp执行完后就被抹杀,所以xxx也被抹杀了
(2)作为工具函数
作为工具函数时,它可以将任何类型的值转为数值。
Number(true) // 1
(3)部分实例方法
方法:Number.prototype.toString()
Number
对象部署了自己的toString
方法,用来将一个数值转为字符串形式。
(10).toString() // "10"
注意
:10
一定要放在括号里,这样表明后面的点表示调用对象属性。如果不加括号,这个点会被 JavaScript 引擎解释成小数点
,从而报错
。
10.toString() // Uncaught SyntaxError: Invalid or unexpected token
只要能够让 JavaScript 引擎不混淆小数点和对象的点运算符,各种写法都能用。除了为10
加上括号,还可以在10
后面加两个点,JavaScript 会把第一个点理解成小数点(即10.0
),把第二个点理解成调用对象属性,从而得到正确结果。
10..toString() // "10"
10..toString(2) // "1010"
4. String 对象
(1)概述
String
对象是 JavaScript 原生提供的三个包装对象之一,用来生成字符串对象。
var s1 = 'abc';
var s2 = new String('abc');
typeof s1 // "string"
typeof s2 // "object"
s2.valueOf() // "abc"
上面代码中,变量s1
是字符串,s2
是对象。由于s2
是字符串对象,s2.valueOf方法返回的就是它所对应的原始字符串。
除了用作构造函数,String
对象还可以当作工具方法使用,将任意类型的值转为字符串。
String(true) // "true"
String(5) // "5"
(2)实例方法
var s1 = 'aldkljhm'
var s2 = new String(s1)
s2[0] // "a",因为String()对象有hash的属性
s1[0] // "a",s1也能调用这个属性,但s1实质没有属性,这个原理和上面Number一样
s2.charCodeAt(0) //97,a的unicode码
s2.charCodeAt(0).toString(16) // "61",a的unicode码的十六进制
' username '.trim() //"username",去掉字符串两边的空格
var s3 = 'Hello'
var s4 = 'World'
s3.concat(s4) //"HelloWorld",连接两个字符串
s3.slice(0,2) //"He",slice是切片,切下0到2之前的内容,即 [0,2)
s3.slice(1) //"ello",返回1和后面的所有内容
s3.replace('e','o') //"Hollo",替换
s3.length //5
5. Boolean对象
6个falsy值,0
、NaN
、null
、undefined
、false
、””
,除了这6个,其他值都是true
。
所有对象都是true
。
var b = false
var b1 = new Boolean(false)
if(b){
console.log('true')
}
if(b1){
console.log('true')
} // true
//只会输出b1,因为所有对象都是true!!
6. Object对象
JavaScript 的所有其他对象都继承自Object
对象,即那些对象都是Object
的实例。
var o1 = {}; //常用方法
var o2 = new Object();
o1 === o2 //false,因为比较的是地址,而地址不同
参考文档: