1.javascript中的非对象类型:
字符串,数字,true,false,null,undefined
2.对象操作是引用而非值操作:
x指向一个对象的引用,执行y=x后y指向的也是x所指对象的引用,对y进行操作即相当于对x操作
3.javascript中的三种对象:
1.内置对象:数组,函数,日期,正则表达式等。
2.数组对象:宿主环境对象。如navigator,window等。
3.自定义对象。在javascript中用户自定义的对象
4.javascript中两种属性类型:
1.自有属性:直接在javascript中定义的属性
2.继承属性:在对象的原型对象中定义的属性
5.对象的创建方式
1.对象直接量方式:
var obj = {};var obj={x:1,y:1}; //像赋值一个json对象一样?
2.使用new关键字:
var obj = new Object();
var obj = new Array();
3.原型prototype:(不属于创建方式?)
在使用直接量方式创建对象时,都具有同一个原型的引用,即Object.prototype;
在使用new 关键字创建对象时,都具有构造函数的原型引用,如Array.prototype;
Object.prototype为特殊的对象,不继承任何属性,其他的普通对象均有一个原型的引用。
4.使用prototype.create()创建:
var Inherited= {x:1,y:1};
var obj = Object.create(Inherited); //对象obj继承Inherited对象
var obj = Object .create(null); //创建一个没有原型的空对象。所有的基本操作都不能执行,如 普通的链接操作+ “toString”
var obj = Object.create(Object.prototype); //创建一个普通的空对象 ,即和{} new Object()操作一样
6.对象的属性设置及访问
注意:在属性中使用到保留关键字作为属性关键字时,只能使用[]格式进行访问
1.通过符号“.”进行访问:
var obj = {x:1,y:2};
alert(obj.x);
obj.x = 11;
2.通过数组下标格式[]访问
var obj = {x:1,y:2};
alert(obj['x']);
obj['x'] = 11;
在使用该形式的时候,需要注意方括号内的表达式必须返回字符串或者是能够转换为字符串的值
7.继承
8.删除属性
var obj = {x:1,y:1};
delete obj.x;
delete obj['x']
9.检测属性
var obj = {x:1,y:1};
1.'x' in obj; (通用)
2.obj.hasOwnPrototype('x');
10.属性的getter 和setter方法
在属性中增加表达式
var obj = {
x:1,
get aa(){
return this.x;
},
set aa(value){
this.x += value;
}
}
console.log(obj.x);
console.log(obj.aa);
obj.aa = 5;
console.log(obj.aa);
11.对象的三个属性
原型:
判断对象是否属于原型链中 p.isPrototypeOf(o);
类:
classof();
可扩展性
即对象是否可以自定义属性
//一下可扩展性操作均不可逆
var obj = {};
obj.a = 1;
/* //配置是否可扩展,但是自有属性任可配置(无法删除)
Object.preventExtensions(obj);
obj.a = 2;
obj.b = 2;
console.log(obj.a);
console.log(obj.b);
console.log(Object.isExtensible(obj)); */
//类似preventExtensions
Object.seal(obj);
obj.a = 2;
obj.b = 2;
console.log(obj.a);
console.log(obj.b);
console.log(Object.isSealed(obj));
//冻结可配置,不能修改已有属性值
Object.freeze(obj);
obj.a = 2;
obj.b = 2;
console.log(obj.a);
console.log(obj.b);
console.log(Object.isFrozen(obj));
12.序列化对象
参考json2.js