全局对象global (window)
window下的属性分两种:一种是ECMA Script 规定,一种浏览器私有(window)
ECMA Script | 私有 |
---|---|
parseInt | alert(弹框) |
parseFloat | prompt(用户填写) |
Number() | consode(开发者工具) |
String() | confirm(确认) |
Boolean() | document(文档) |
Object() | history |
... | ... |
全局函数
Number
var n = new Number(1); //这是一个对象,有自己的属性。
var x = 1; //这时x一个基本类型。
x.toString() //以n不同的是:这时浏览器会声明一个临时变量temp,将x作为number对象赋值给他。
var temp = new number(x);
temp.toString();// 与n不同的是,执行完后temp就会被删除;
x.xxx = 2; //可以的
x.xxx //x.xxx===undefined,因为xxx是存在temp的,上一句的temp执行完后就被删除,所以xxx也被删除了
String
var n = String("xyb")
var n1 = new String(n)
n1[0] //'x'因为String()对象有hash的属性
n[0] // 'x'也能调用这个属性,但n实质没有属性,这个原理和上面Number一样
Boolean
var b = false; //false
var b1 = new Boolean(false); //true
if(b){console.log('true')};
if(b1){console.log('true')}; // true
//只会输出b1,因为所有对象都是true!!
Object
var o1 = {}
var o2 = new Object()
o1 和 o2 没区别
o1 === o2 //false,因为比较的是地址,而地址不同
公用属性(原型)
所有对象都有 toString 和 valueOf 属性,那么我们是否有必要给每个对象一个 toString 和 valueOf 呢?
明显不需要。
JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)
然后让每一个对象的 __ proto__ 存储这个「公用属性组成的对象」的地址。
proto和prototype的区别
window里存放obj、num…这几个对象,对象里的prototype属性里存了它们原型的地址,在你写:var n = new Number(1); 就会把Number.prototype里的地址放入n的proto属性里
网友评论