全局变量
Global
是是ECMAScript 中的全局对象(浏览器中是window
),不属于其他对象的属性和方法,所有在全局作用域中定义的属性和方法,都是Global
对象的属性(window
)。
window
的属性分为两类,一种是ECMAScript 规定的,一种是浏览器私有的(各浏览器可能不一样)。ECMAScript 规定的的有parseInt
、parseFloat
、Number
、String
、Object
、Boolean
等,浏览器私有的alert
、console
、prompt
、document
等。
var n = 1 //n是基本类型(number)
var n1 = new Number(1) //n1是对象(object)
对象有toString()
方法,比如n1.toString()
基本类型也可以用toString()
方法,它是通过在内存中创建一个临时变量来获取的,比如temp.toString()
,在语句结束后这个变量就被回收了,所以:
var a = 1
a.xxx = 2 //语句结束后被回收
a.xxx //undefined,再次访问该属性,值为undefined
原型
__proto__
和prototype
的区别:
var s = new String()
//String.prototype 是 String 的公共属性(原型)的引用
//s.__proto__ 是 String 的公有属性(原型)的引用
Number
、String
、Object
、Boolean
的公有属性都存储在Object
原型中。没写代码的时,浏览器就默认有这条原型链指向Object
原型,如下图;当我们创建了一个变量后,它就创建了在Heap 中创建了一个对象,指向这个对象本身的原型,不在指向prototype
,如下图红线。
对象.proto === 函数.prototype;
var __①__ = new __②__;
//① 类型:对象
//② 类型:函数
var Object = new Function();
//var 对象 = new 函数;
Object.__proto__ === Function.prototype;
//对象.__proto__ === 函数.prototype;
Function.__proto__ === Function.prototype;
//因为 Function 也是 Object
网友评论