1.对象的创建
字面量
var person = {
name:"zhangsan",
age:"20",
sayname: function(){
console.log(this.name);
}
}
构造函数
person.name='zahngsan'
2.对象的访问
属性的访问
.
[] 必须加单引号,因为是字符串
var person = {
name:"zhangsan",
age:"20",
sayname: function(){
console.log(this.name);
}
}
//属性访问
console.log(person.name);
console.log(person['age']);
3.新增删除对象中的属性
var person = {
name:"zhangsan",
age:"20",
sayname: function(){
console.log(this.name);
}
}
//属性访问
console.log(person.name);
console.log(person['age']);
person.sayname()
//删除属性
delete person.age;
console.log(person);
//新增
person.height = 1.78;
console.log(person);
4.Object显示类型转换(强制类型转换)
Boolean(value)
把给定的值转换成Boolean型:
String(value)
把给定的值转换成字符串,
string(obj);
obj.tostring;
重写:相同名字内容改了(一般不重写,不能把人底层api给改了)
Number(value)
把给定的值转换成数字(可以是整数或浮点数)
obj转number
1.如果只重写了valueof()或者tostring()方法,则调用该方法,并将返回值用Number()转换。
2.如果两个方法都重写了,则调用valueof(),并将返回值用Number()转
换。
3.如果两个方法都没有重写,则返回NaN
5.检测属性
in 他不能判断继承属性
Object.prototype.hasOwnProperty()他能判断继承属性
Object.prototype.propertylsEnumerable() 还要求可枚举属性才能回返回true
6.Object原型属性及方法(原型方法,实例可以调用的方法)(面试必问)
object祖先有个原型对象叫prototype,,里面包含一个指针constructor属性,属性里面包含很多的实例方法,用obj.tostring();,实例有个指向指针--proto--指向那个原型对象prototype。
var obj = new Object();
//调用原型对象中继承的方法
console.log(obj.toString());
console.log(obj.__proto__ .toString());
// 构造函数 object
console.log(Object);//[Function:object]
//原型对象 object.prototype
console.log(Object.prototype);//{}
//原型对象中的constructor属性原型对象中的constructor属性指向构造函数
console.log(Object.prototype.constructor);//[Function:object]
//实例 proto指向 原型对象
console.log(obj.__proto__==Object.prototype);//true
//1创建Date对象
var now= new Date()
console.log(now);
//使用原型对象中的方法
console.log(now.toString());
console.log(now.toLocaleString());
7.深入理解对象-定义属性(vue双向绑定的底层原理,面试必问)
数据属性
Object.defineProperty()
这个属性只有这个值能被控制
Object.defineProperty(obj,'gender',{
//是否能被删除
configurable:true,
//是否能被枚举
enumerable:true,
//是否能被改写
writable:true,
//值
value:'nan'
})
enumerable(false)不能通过for in循环打印输出,或者被隐藏了,但是能被抓包工具抓到
Object.defineProperties()读取属性特性
Object.defineProperties(obj,{
height:{
value:1.78
},
hobby:{
configurable:true,
enumerable:true,
writable:true,
value:'football'
}
}
)
getOwnPropertyDescriptor()
console.log(Object.getOwnPropertyDescriptor(obj,'gender'));
访问器属性
我们可以在访问器属性中写get和set方法,默认值configurable:false, enumerable:false,
8.对象序列化
解决深拷贝浅拷贝的方法之一(最复杂)
JSON.stringify(obj) 将对象序列化为JSON字符串,只能序列化对象可枚举的自有属性
JSON.parse(jsonStr)反序列化