全局对象 window
ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象(浏览器先存在的)
window 就是一个哈希表,有很多属性。
window 的属性就是全局变量。
1(global):一种是ECMAScript标准规定的全局对象
- global.parseInt
- global.parseFloat
- global.Number
- global.String
- global.Boolean
- global.Object
2.(window):一种是浏览器自己的全局对象
- window.alert
- window.prompt
- window.comfirm
- window.console.log
- window.console.dir
- window.document
- window.document.createElement
- window.document.getElementById
每次浏览器打开的时候,就会生成一个全局对象。那么为什么要有全局对象呢?因为这样我们可以调用一些方法,所以要有一些内置的对象或方法。

image.png
全局函数
1.Number
- Number(1)
- var n=new Number(1)
问题:var n1=1和var n2 = new Number(1) 的区别是什么?看内存图
一个是基本类型,一个是对象,一般我们都用前者,后者没人用。
image.png
问题:为什么有两种方式呢?
js之父Brendan Eich被公司要求写一门浏览器语言,但这言语要和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
temp.toString() //用temp来执行toString,执行之后temp就被抹杀了

image.png
当执行n.toString(),我们假设会先在Heap中生成一个对象temp,然后temp调用方法,得到字符串1,于是字符串1作为n.toString的结果,最后将临时对象抹杀
问题:下面第二行代码报错吗?
var a=1;
a.xxx=2; // 不报错
a.xxx // undefined
a.xxx为undefined,因为xxx方法是存在于temp中的,上一句temp执行完就被抹杀了,所以xxx也会被抹杀,所以执行第三局n.xxx的时候,又创建了一个临时对象地址为10,这时这个临时对象的xxx方法就没有值,所以为undefined

image.png
总结:基本类型n可以调用toString,...等方法是因为生成临时对象temp,temp调用方法后的返回值再传给n.toString
2.String
var s = new String('hello') 创建一个 String 对象
'hello' 与 new String('hello') 的区别是什么?看内存图
3.Boolean
var b = new Boolean(true) 创建一个 Boolean 对象
true 与 new Boolean(true) 的区别是什么?看内存图
4.Object
var o1 = {}
var o2 = new Object()
o1 和 o2 没区别
