全局对象
ECMAScript规定的全局对象叫global,浏览器把window作为全局对象(因为人家浏览器出的早啊)。
window是一个哈希表,有很多的属性。这些属性就叫做全局变量。
这些全局变量分为两种:
①:ECMAScript规定的
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
②:浏览器加的 - window.alert
- window.prompt
- window.history
- window.comfirm
- window.console.log
- window.console.dir
- window.document
- window.document.createElement
- window.document.getElementById
API的详细资料
全局函数。复杂类型和简单类型的区别
1.Number
var n = new Number(1) 创建一个 Number 对象
2.String
var s = new String('hello') 创建一个 String 对象
3.Boolean
var b = new Boolean(true) 创建一个 Boolean 对象
4.Object
var o1 = {}
var o2 = new Object()
那么1和new Number(1)有什么区别呢。1直接存储在stack里,new Number(1)则是作为一个对象,存储一个地址,指向一个对象。 String,Boolean同理。 但是上面对象o1和o2没有区别,但是o1和o2不相等。
var n1 = 1; n1在内存图中储存的只是一个number1,但是n1.toString() 显示结果为'1',n1不是对象,这结果是哪来的呢。 因为浏览器临时调用了一个变量,将这个变量的toString值当做n1的toString值,再讲这个变量消除。
公用属性,原型链
所有的对象都有toString,valueOf属性,是不是每个对象都有储存一个toString和valueOf呢?不是的。
JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象),然后让每一个对象的__proto__
存储这个「公用属性组成的对象」的地址。
每个实例对象(object )都有一个私有属性(称之为__proto__
)指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__
) ,层层向上直到一个对象的原型对象为 null
。根据定义,null
没有原型,并作为这个原型链中的最后一个环节。几乎所有 JavaScript 中的对象都是位于原型链顶端的Object
的实例。
重要公式!!!
var 对象 = new 函数()
对象.__proto__ === 对象的构造函数.protoytpe
//推导
var number = new Number()
number.__proto__ = Number.prototype
Number.__proto__ = Function.prototype // 因为 Number 是 Function 的实例
var object = new Object()
object.__proto__ = Object.prototype
Object.__proto__ = Function.prototype // 因为 Object 是 Function 的实例
var function = new Function()
function.__proto__ = Function.prototype
Function.__proto__ == Function.prototye // 因为 Function 是 Function 的实例!
Function.prototye.__proto__ = Object.prototype//Function.prototye是个对象