对象----一组数据(属性)和功能(方法)的集合。
- 创建对象
1.使用构造函数创建对象 new Object()
var obj = new Object();
2.使用对象字面量声明对象
var obj = {};
- 访问对象属性
- 使用.访问对象中的属性或方法
obj.name/obj.sayName()
若对象中没有要访问的属性,结果不会报错,会返回undefined
没有的属性obj.name -> undefined
调用没有的方法obj.sayName() -> 报错
点表示法适用于直接访问对象的属性和方法,[]适用于函数传参时通过变量来访问对象属性值
var myObj = {
gift: "pony",
pet: "kitten"
};
function checkObj(checkProp) {
if(myObj.hasOwnProperty(checkProp)){
return myObj[checkProp];//注意这里
}
return "Not Found";
}
console.log(checkObj("pet"));//此时传入的属性名使用引号引起来的,必须使用[]来访问对象的属性值
- 使用[]访问对象中的属性
属性名用引号包裹,["name"]
[]中没有用引号包裹的,会被当成变量处理
- 遍历对象的属性
for-in
for(var key in obj){
//key-->属性名--变量
console.log(key,'-----',obj[key]);
}
- 删除对象中的属性
delete obj.name;
例,删除对象中的属性值为空的属性:
var obj ={
name:"bob",
gender:'',
address:null
};
for(var key in obj){
if(!obj[key]){
delete obj[key];
}
}
- 检测属性
- in 检测是否是自有属性或继承属性
console.log("name" in obj);//true
console.log("toString" in obj);//true
- hasOwnProperty() 判断是否是自有属性
自有属性返回true
,继承属性返回false
,如果重写了toString()方法,则返回true
console.log(obj.hasOwnProperty("name"));//true
console.log(obj.hasOwnProperty("toString"));//false
- propertyIsEnumerable() 判断是否是自有属性,且是可枚举的
console.log(obj.propertyIsEnumerable("name"));//true
- 判断是否是继承属性
function inherit(attr){
if((attr in obj)&&!obj.hasOwnProperty(attr)){
console.log("是继承属性");
}else{
console.log("不是继承属性");
}
}
- 对象序列化–将对象的状态转换为字符串,用""引起来
JSON – JavaScript Object Notation JavaScript对象表示法
JSON.stringify(obj)
将对象序列化为JSON字符串
只能序列化对象可枚举的自有属性JSON.parse(jsonStr)
反序列化,将字符串还原为对象函数
RegExp,Error对象,undefined,函数均不能序列化和反序列化
每一个构造函数都有一个原型对象
实例可以调用对应的构造函数中的原型对象的属性和方法
- Object的原型对象
console.log(Object.prototype);//{}
- 实例中没有属性和方法,实际上是使用的原型对象中的属性和方法
console.log(obj.toString === Object.prototype.toString);//true
- Object的原型中的属性与方法
1.constructor 获取当前对象的构造函数
console.log(Object.prototype.constructor === Object);//true
console.log(obj.constructor);//Object
通过实例找构造函数
console.log(obj.constructor);//[Function: Object]
2.toString() 返回对象的字符串表示
console.log(obj.toString());//'[object Object]'
对象调用toString()方法默认返回'[object Object]'
3.valueOf() 返回对象的原始值
4.hasOwnProperty() 判断是否是自有属性
5.propertyIsEnumerable() 判断是否是自有属性,且可枚举的
6.isPrototypeOf()
a.isPrototypeOf(b) 判断a是否是对象b的原型
Object.prototype.isPrototypeOf(obj)//true
7.toLocaleString() 将时间转换为本地日期和时间的格式
2019-7-11 3:25:09 PM