JavaScript的简单数据类型包括数字,字符串,布尔值(true/false), null值和undefined值。其他所有值都是对象。数字,字符串,布尔值也有方法,但是他们是不可变的。
对象是可变的键控集合,是属性的容器。属性的名字是包括空字符长在内的任意字符串(如果属性名是一个合法的JavaScript标识符,且不是保留字,则不需要用引号包裹。反之,则必须用引号包裹)。属性值可以是除了undefined值之外的任何值。
对象的三个相关对象特性
- 对象的原型(prototype)指向它的原型对象,本对象继承自它的原型对象
- 对象的类(class)是一个标识对象类型的字符串
- 对象的拓展标记(extensible flag)指明了是否可以向该对象添加新的属性
创建
//直接量
var obj = {};
//new
var m = new Object();
var a = new Array();
var r = new RegExp("js");
//Object.create()
var o = Object.create({x:1, y:2});
var o1 = Object.create(null);//o1不继承任何方法和属性
var o2 = Object.create(Object.prototype);//和{}/Object()一样
var o3 = Object.create({}, {
p: {
value: 2, // 属性值
writable: true, // 是否可以重写值
enumerable: true, //是否可枚举
configurable: true //是否可以修改以上几项配置
}
});
Object.create() 是一个静态函数,用于创建一个新的对象,第一个参数是这个对象的原型,第二个参数用以对对象的属性的进行进一步描述。
检索
对象的检索可以使用 “.”,或者["name"]来检索属性,如果属性名是一个合法的JavaScript标识符,且不是保留字,则可以使用“.”。反之,则必须用["name"])。
引用
对象通过引用来传递,但永远不会被复制;
原型/原型链
每个对象都连接到一个原型对象,并可以从中继承属性,所有通过对象字面量创建的对象最终都会连接到Object.prototype,从而建立起原型连接。
原型连接在更新是不起作用。只会更新该对象,不会触及其原型。
原型只有在检查值的时候才会被用到。从子类开始,依父子关系逐层查找属性的过程叫做委托。
原型关系是一种动态的关系,如果我们添加一个属性到原型之中,该属性对所有子类可见。
枚举
for...in... 可以用来遍历一个对象中的所有属性名,包括函数,属性,以及原型的函数和属性。若想过滤掉原型的方法/属性,可使用过滤器hasOwnProperty方法,用typeof来排除函数。
for 遍历不会包含原型的方法或者属性
减少全局变量的使用
创建一个唯一的对全局变量,然后将其他参数作为属性注入
网友评论