全局对象 window
ECMAScript 标准规定全局对象叫做 global(打开网页加载),但是浏览器把 window 作为全局对象(浏览器先存在的)
window 就是一个哈希表,有很多属性。
window 的属性就是全局变量。
这些全局变量分为两种:
⦁ 一种是 ECMAScript 规定的
⦁ 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
······
全局函数
⦁ Number
var n = 1和var n = new Number(1) 的区别是什么?
var n = 1是直接在stack中存储1
var n = new Number(1) 是将1作为原始值放入Heap(也就是创建一个对象,这里面有一些可以引用的属性,比如toString之类的),n通过stack的地址引用这个对象,从而引用对象中的属性
但是对于var n = 1而言,也可以访问到这些属性,这是为什么呢?
因为JS语言为了图方便,在使用属性的时候,比如n.toString(),会进行临时转换,temp=new Number(n) ; 所以使用n.toString()相当于temp.toString(),因此var n=1的声明和var n = new Number(1)使用属性时的效果是一样的
<注意>
var n = 1
n.toString() 这个调用只会临时创建一个temp对象。只发生在调用时。调用完之后这个对象就不见了。比如声明var n =1 ;令 n.x = 2 ; 返回n.x //undefined,因为n.x=2写入临时对象后,对象就消失掉了,n.x也就不存在了
<总结>
var n = 1看似普通类型。但是也可以访问对象的属性值,其实是在访问是临时转换一个对象 ,而且这个对象只在调用属性时存在,调用后立刻消失
⦁ String
var s = 'hello'
var s = new String('hello')的区别和上面差不多
String的一些方法需要了解
⦁ Boolean
var b = true
var b = new Boolean(true) 的区别也时一样,var b = true只是在stack存放true
<注意>
var f1 = false
var f2 = new Boolean(false)
if(f1) ={console.log(1)}
if(f2) ={console.log(2)}
//结果是2 ,为什么呢?
因为f1只是一个基本类型,false就是false,而f2是一个对象,一切对象都是true,所以会
⦁ Object
var o1 = {}
var o2 = new Object()
o1 和 o2 没区别
<但是>
o1 === o2 //false
因为o1的stack和o2的stack存放的地址是不同的,尽管他们的对象是一样的