全局對(duì)象 window
ECMAScript 規(guī)定全局對(duì)象叫做 global荚斯,但是瀏覽器把 window 作為全局對(duì)象(瀏覽器先存在的)茧泪。
window 就是一個(gè)哈希表涯保,有很多屬性丽惶。
window 的屬性就是全局變量恒序。
這些全局變量分為兩種:
1. ECMAScript 規(guī)定的
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
2. 瀏覽器自己加的屬性(私有屬性)
- window.alert(彈窗提示)
- window.prompt(用戶填寫)
- window.comfirm(用戶確認(rèn))
- window.console.log
- window.console.dir
- window.document
- window.document.createElement
- window.document.getElementById
- history
所有 API 都可以在 MDN 里找到詳細(xì)的資料。
全局函數(shù)
Number
var n2 = new Number(1)
創(chuàng)建一個(gè) Number 對(duì)象;
var n1=1
n1不是對(duì)象,基本類型沒有屬性顾稀,沒有toString等屬性;
進(jìn)行臨時(shí)轉(zhuǎn)換:
temp = new Number(n1)
temp.toString()
temp是n1的一個(gè)復(fù)雜類型的封裝坝撑,
temp.toString的值當(dāng)作n1.toString的值静秆;
最后干掉temp;
問題:
var n = 1
n.xxx = 2
n.xxx ?
undefined
第二行:只要一句結(jié)束,臨時(shí)對(duì)象就會(huì)被清除巡李;
String
var s2 = new String('hello')
,創(chuàng)建一個(gè) String 對(duì)象;
var s='hello'
Boolean
var b2 = new Boolean(true)
創(chuàng)建一個(gè) Boolean 對(duì)象;
var b = true
問題:
var f = false
var f2 = new Boolean(false)
if(f){console.log(1)}
if(f2){console.log(2)}
?
2
f2是一個(gè)對(duì)象抚笔,所有對(duì)象都是真值。
Object
var o1 = {}
var o2 = new Object()
o1 和 o2 沒區(qū)別侨拦;
o1 === o2
false
不相等殊橙。
公用屬性
所有對(duì)象都有 toString 和 valueOf 屬性,我們不需要給每個(gè)對(duì)象一個(gè) toString 和 valueOf 。
JS 的做法是把 toString 和 valueOf 放在一個(gè)對(duì)象里(暫且叫做公用屬性組成的對(duì)象)蛀柴;
然后讓每一個(gè)對(duì)象的 proto 存儲(chǔ)這個(gè)「公用屬性組成的對(duì)象」的地址螃概。
重要公式
注意大小寫,number 和 Number 是不同的
var 對(duì)象 = new 函數(shù)()
對(duì)象.proto === 對(duì)象的構(gòu)造函數(shù).prototype
proto 與 prototype 的區(qū)別:
__proto__
是對(duì)象的屬性鸽疾,
prototype
是函數(shù)的屬性;
推論:
- var number = new Number()
number.proto = Number.prototype
- var object = new Object()
object.proto = Object.prototype
- var function = new Function()
function.proto = Function.prototype
所有函數(shù)都是由 Function 構(gòu)造出來的吊洼,所以:
Number.proto = Function.prototype
// 因?yàn)?Number 是函數(shù),是 Function 的實(shí)例;
Object.proto = Function.prototype
// 因?yàn)?Object 是函數(shù)制肮,是 Function 的實(shí)例;
Function.proto == Function.prototye
// 因?yàn)?Function 是函數(shù)冒窍,是 Function 的實(shí)例。