全局对象 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
JavaScript的作者Brendan Eich被公司要求JS要像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.toString(); //用temp来执行toString,执行完后temp就被抹杀了
n.xxx = 2; //可以的
n.xxx //但undefined,因为xxx是存在temp的,上一句的temp执行完后就被抹杀,所以xxx也被抹杀了
String
var s = 'abc'; // 原理和Number一样
var s2 = new String(s);
s2[0] // 'a',因为String()对象有hash的属性
s[0] // 'a',s也能调用这个属性,但s实质没有属性,这个原理和上面Number一样
s.charCodeAt(0) // 97,a的unicode码
s.charCodeAt(0).toString(16) //'61',a的unicode码的十六进制
' abc '.trim(); // 'abc',去掉字符串两边的空格
var s1 = 'Hello';
s.concat(s1); // abcHello,连接两个字符串
s1.slice(0,1); // 'H',slice是切片,切下0到1之前的内容
s1.replace('e','o') // 'Hollo',替换(注意S1还是原来的S1,replace是得到一个新的字符串'Hollo')
s1.length // 5
Boolean
5个falsy值,0、NaN、null、undefined、””,除了这5个,其他值都是true
所有对象都是true
var b = false;
var b1 = new Boolean(false);
if(b){console.log('true')};
if(b1){console.log('true')}; // true
//只会输出b1,因为所有对象都是true!!
Object
var o1 = {}; //常用方法
var o2 = new Object();
o1 === o2 //false,因为比较的是内存地址,而地址不同
网友评论