关于JavaScritpt的var随想

下面只是自己的一些测试加猜测,不对的地方欢迎拍砖

测试环境:ubuntu12下的FireFox13.01,Chrome20

(1)关于var

因为JavaScript是一个高度对象化的语言,所以通过var声明的变量其实也是一个对象,JavaScript引擎会更加等号右边的变量去寻找

该变量对应的对象。在这里需要注意的是JS引擎应该对undefined和null做了特殊处理,当等号右边的为undefined或者是null时,那么此时

对应的将不是对象。

通过上面的测试我们不难猜测:通过var来声明的变量其实都是一个对象,对于这个对象所对应的方法和属性,JS引擎会根据等号左边的值来寻找对应的对象。

而且每个对象都继承自Object,可以看见上面的Number,String,Function都是对Object的扩展。

Object的属性和对象有:

Constructor:指向的是JS引擎找出来的那一个对象

hasOwnProperty:

isPrototypeOf:

PropertyIsEnumerable:

toLocaleString:

toString:

valueOf:

关于私有属性__proto__

通过上面的测试可以看出:其实每个变量都存在__proto__属性的,只是每个属性对应的值不一样,如果该变量不是通过new声明的,那么这个变量的__proto__就是固定的

根据等号右边的值来定,分别有Number,String,Boolean,Object,function Empty(){},如果等号左边是通过new funcName()指定的,那么此时该变量的__proto__和funcName的

prototype指向内存中同一个位置:

 

posted @ 2012-07-08 12:34  shawnXiao  Views(526)  Comments(2Edit  收藏  举报