1. js有两种类型的对象
原生的(Native)包括:内置对象(日期Date,数组Array等)、用户自定义对象(var o = {})
主机的(Host)包括:windows和DOM对象
2. ECMAScript5 特性
增加了一些新的内置对象、方法和属性,增加了strict模式
3. 自定义构造函数
当我们使用new操作符调用构造函数时发生的事情如下:
1.隐式的创建一个新的空的对象,让this指向这个对象,同时还继承了该函数的原型
2.给this指向的对象添加属性和方法
3.隐式的返回this指向的对象
var Person = function (name) {
//使用字面量模式创建一个对象
//var this = {}
//向this添加属性和方法
this.name = name;
this.sayHi = function () {
console.log("Hello, I am" + this.name);
};
//return this;
}
上例中可重用的方法(sayHi)在每次调用new Person()
时都在内存中创建一个新的函数,效率低下。更好的方法是将他添加到Person的原型中。
Person.prototype.sayHi = function () {
console.log("Hello, I am" + this.name);
}
4. 空对象属性不为空,它从原型对象中继承了属性
5. 调用构造函数时忘记加new
会导致构造函数中的this指向全局对象。如果构造函数中有this.name = ' '
这种表示方法,他会成为全局属性
6. new Array()
通过new Array()创建数组时,传入的第一参数如果是数字的话会被认为是数组的长度。检测数组对象的方法Array.isArray()
、constructor
。如:Array.isArray([]); //true
、[].constructor === Array; //true
7.基本值类型包装器
string/number/boolean/null/defined
var str1 = '1234';
var str2 = new String('1234');
typeof str1; //'string'
typeof str2; //'object'
typeof String(new String('1234')) //'string'