JavaScript对象

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)反序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值