全局对象

number()
标准里面叫做global 浏览器里面叫做window
window属性主要分为:
ECMAScript规定
例如:parseInt parseFloat 等必有函数
私有(根据浏览器各有不同)
例如:
alert(弹框提示)
prompt(用户填写)
comfirm(确认)
consde(开发者)
document(文档)代表你可以对文档所做的一切操作
history(浏览器相关)等
以及已经存在的Number、String、Boolean、Object等对象
声明一个Number对象
1、Number('任何东西')它会尝试把它变成一个Number
2、var n = new Number(1) 它会把1变成一个对象
假设:
var n1 = 1
var n2 = new number(1)


但是var n= 1不能toString,因为基本类型是没有属性的
怎么解决呢?
临时转换:
声明一个临时对象temp,n.toString()实际上是temp.toStiring(),然后将temp.toStiring,作为n的toString的值,然后干掉temp

内存图:

两种方法声明一个String字符串
1、直接写
var s = 'asdasdasd'
2、new Stiring
var s2= new String(s)
他们的区别是:第一种是基本类型的String,它直接存在stack里面,第二种是变成对象之后的一个hash

它里面还有很多属性

例如
charAt 获取某一个索引对应的字符

charCodeAt 获取某一个索引对应的字符的编码

获取相对于字符的十六进制Unicode码

连接两个字符串为一个字符串,得到 三个字符串

声明Boolean的方式
1、var b = true
2、var b2 = new boolean(ture)
声明对象的方式Object
1、var o1 ={}
2、var o2 = new Object{}
一般用第一种 因为要短一些
两种没有区别,但是不相等(对象和对象之间都是不相等的,因为内存地址不同)
公用属性(原型)

number和obj的 共有属性,__ proto __属性指向当前对象的原型对象。
所有对象都有自己相对应的共有属性

同时Number、String、boolean等对象还有它们的特有公用属性,所以它比Object要多一个公用属性库,并且会先访问它们的原型(公用属性库),然后都指向Object的共有属性,最后指向null.

__ proto __ 与prototype

prototype是浏览器准备的公用函数,__ proto __ 是用来引用公用函数的
o1.__ proto __ === Object.prototype
就是所有Object的共有属性,是把prototype的地址
赋给__ proto __ 属性了
Number、String、Boolean等同理
n1.__ proto __ === Number.prototype
相对应的n1.__ proto __ .__ proto __ === Number.prototype
意思是把Object.prototype的地址赋给Number的proto属性了
var 对象 = new 函数();
函数可以是Number、String、Boolean、Object
对象.__ proto __ === 函数.prototype

网友评论