一. 全局對(duì)象window
ECMAScript 規(guī)定全局對(duì)象叫做 global遣妥,但是瀏覽器把 window 作為全局對(duì)象(瀏覽器先存在的)
window 就是一個(gè)哈希表爆阶,有很多屬性。
window 的屬性就是全局變量辨图。
全局變量分為兩種,一是ECMAScript規(guī)定的吱韭,如:
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
另一種是瀏覽器自己加的屬性鱼的。如: - window.alert
- window.prompt
- window.comfirm
- window.console.log
- window.console.dir
- window.document
- window.document.createElement
- window.document.getElementById
window對(duì)象中的所有方法都可以省去window,window.alert可以寫成alert猿规,且這些屬性在不同瀏覽器中顯示出來(lái)的效果也可能不同
二. 簡(jiǎn)單類型與對(duì)象的區(qū)別
var n1 = 1
var n2 = new Number(1)
以上兩種都是聲明數(shù)值的方法宙橱,第一種創(chuàng)建的是簡(jiǎn)單數(shù)據(jù)類型,第二種創(chuàng)建的是一個(gè)對(duì)象师郑。他們之間有什么區(qū)別呢?
首先是占用內(nèi)存的方式不一樣张遭,
由于n1是簡(jiǎn)單數(shù)據(jù)類型地梨,存儲(chǔ)在棧內(nèi)存中,而n2是一個(gè)對(duì)象的烁,所以棧內(nèi)存存儲(chǔ)的是一個(gè)地址诈闺,地址指向該對(duì)象內(nèi)容所存儲(chǔ)的堆內(nèi)存。
三. 一些常用的屬性
- Number對(duì)象
Number的常用屬性 | 含義 |
---|---|
Number.valueOf() | 獲取對(duì)象本身的值 |
Number.toString() | 將數(shù)值轉(zhuǎn)化為字符串 |
Number.toFixed() | 將其轉(zhuǎn)換為小數(shù) |
Number.toExponential() | 將其轉(zhuǎn)化為科學(xué)計(jì)數(shù)法 |
- String對(duì)象
String的常用屬性 | 含義 |
---|---|
String.charAt() | 獲取字符串中某一位的字符 |
String.charCodeAt() | 獲取字符串中某一位的字符的Unicode編碼 |
String.trim() | 刪除字符串中多余的空格 |
String1.concat(String2) | 連接字符串1和字符串2 |
String.slice(start,end) | 切片襟雷,截取字符串(包前不包后),從start到end |
String.replace('e','o') | 將字符串中的e替換成o(只能替換第一次出現(xiàn)的字符) |
String.indexOf() | 搜索字符串中的內(nèi)容(只檢測(cè)到第一次出現(xiàn)的字符)咧虎,沒(méi)搜到返回-1 |
String.split() | 分隔 |
String.substr(start[, length]) | 截取,返回一個(gè)字符串中從指定位置開(kāi)始到指定字符數(shù)的字符 |
四. 原型
Number砰诵、String捌显、Boolean、Object這四類對(duì)象他們都會(huì)擁有一些共同的屬性扶歪,這些屬性是一樣的,如果他們各自擁有各自的這些一樣的屬性的話善镰,就會(huì)非常浪費(fèi)內(nèi)存,所以就有了公用屬性乎完,把所有的對(duì)象共有的屬性全部放在heap內(nèi)存的一個(gè)地方品洛,當(dāng)需要使用的時(shí)候,引用這個(gè)對(duì)象即可毫别,這么操作就會(huì)減少不必要的內(nèi)存浪費(fèi)岛宦,而這個(gè)公有屬性耍缴,也就是原型。
__ proto__就是這些共用屬性的引用
由于Number变汪、String、Boolean這三種對(duì)象比較特殊裙盾,他們是本身Number、String庐完、Boolean的同時(shí),也是對(duì)象门躯,所以他們的__ proto__指向的是自己本身的公有屬性酷师,這些公有屬性的__ proto__指向的才是Object的公有屬性
圖中箭頭從左到右連成的線叫原型鏈山孔,簡(jiǎn)單理解就是原型組成的鏈,對(duì)象的__ proto__是原型饱须,而原型也是一個(gè)對(duì)象,也有__ proto__屬性譬挚,原型的__ proto__又是原型的原型酪呻,就這樣可以一直通過(guò)__ proto__往上找,這就是原型鏈玩荠,當(dāng)向上找找到Object的原型的時(shí)候,這條原型鏈就算到頭了(Object的原型的__ proto__為null)
- __ proto__與prototype的區(qū)別
即使不寫任何代碼闷尿,JS引擎也會(huì)把原型鏈以及各個(gè)原型對(duì)象準(zhǔn)備好女坑,并且,為了不讓他們被當(dāng)成垃圾回收匆骗,瀏覽器用Object.prototype指向原型對(duì)象,所以不寫代碼就會(huì)有prototype
__ proto__ 是某對(duì)象公用屬性的引用碉就,是為了用戶使用其共用屬性中的方法而存在的 。
prototype 是瀏覽器寫的筋量,本身就存在烹吵,是某對(duì)象的共同屬性的引用年叮,為了不讓對(duì)象的公用屬性因沒(méi)有被調(diào)用而被垃圾回收而存在玻募。
五. 一些等式
var 對(duì)象 = new 函數(shù); 是JS中聲明一個(gè)對(duì)象的常用方法,可以推導(dǎo)出一些等式:
- 對(duì)象.__ proto__ === 函數(shù).prototype(__ proto__是對(duì)象的屬性跃惫,prototype是函數(shù)的屬性)
從上面最基本的等式我們可以推導(dǎo)出下面的等式
- 函數(shù).prototype.__ proto__ === Object.prototype (由于函數(shù).prototype是一個(gè)對(duì)象)
- 函數(shù).__ proto__ === Function.prototype(函數(shù)本身是函數(shù),但它也是一個(gè)對(duì)象爆存,它的構(gòu)造函數(shù)是Function)
- Function.__ proto__ === Function.prototype(Function既是對(duì)象蝗砾,也是函數(shù),但它優(yōu)先是個(gè)函數(shù))
可以看出闲勺,F(xiàn)unction.prototype 與Funciton.__ proto __ 互相引用
而且扣猫,Object.__ proto __ === Function.prototype,因?yàn)?Function 是 Object 的構(gòu)造函數(shù)