随手总结 ----- 对象的操作

对象属性的增、删、改、查、判断

var obj = {}

// 对象属性的增加
obj.key1 = value1
obj['key2'] = value2

// 对象属性的读取
var x1 = obj.key1
var x2 = obj['key2']

// 对象属性的修改
obj.key1 = value3
obj['key2'] = value4

// 对象属性的删除
// delete 默认删除自身的属性,不删除__proto__上的
delete obj.key1
delete obj['key2']

// 判断该对象上是否有该属性
// 方法1 
// in即可判断自身属性,也可判断__proto__上的属性
console.log( key1 in obj ) // 有--true,没有--false
// 方法2  
// 对象名.hasOwnProperty('属性名'),只能判断自身的属性
console.log( obj.hasOwnProperty('key1') ) // 有--true,没有--false

// 冻结对象 
// Object.freeze( 对象名 )
var obj = {}
Object.freeze( obj )
obj.a = 1
console.log(obj) // {}
// const声明了一个常量,一旦声明,不能改变,
// 基本数据类型:值不能变,
// 引用数据类型:地址不可变

// 判断该对象是否为空
var obj1 = {}
var obj2 = { key:value }
// 方法1 
// JSON.stringify(对象名) 转为字符串
console.log(  JSON.stringify(obj1) == '{}' ) // true
console.log(  JSON.stringify(obj2) == '{}' ) // false
// 方法2
// Object.keys() 获取对象中所有属性并以数组形式表示
console.log (Object.keys(obj1).length == 0 ) // true
console.log (Object.keys(obj2).length == 0 ) // false
// 方法3
for (var key in obj1) {
    console.log('不空')
} // 不打印,''
for (var key in obj2) {
    console.log('不空')
} // 打印,'不空'
 
// Object.defineProperty()
// value和writable 不能与 get和set 共存
Object.defineProperty(obj, key, {
    value:value, // 设置value值
    writable:true/false, // 是否可修改,默认true
    configurable:true/false, // 是否可删除,默认true
    enumerable:true/false, // 是否可枚举,默认true
    get:function(){
        
        return value
    },
    set:function(newVal){
        
        return newValue
    }
})

// 对象解构
let person = { name: 'zhangsan', age: 20 }; 
let { name, age } = person;
console.log(name); // 'zhangsan' 
console.log(age); // 20
--------------------------------------
let {name: myName, age: myAge} = person; // myName myAge 属于别名
console.log(myName); // 'zhangsan' 
console.log(myAge); // 20

数据双向绑定原理

主要是通过 Object对象的defineProperty属性,重写data的set和get函数来实现的

数组解构

let [a, b, c] = [1, 2, 3];
 console.log(a)//1
 console.log(b)//2
 console.log(c)//3
//如果解构不成功,变量的值为undefined
let [d,e,f] = [1,2];//d=1,e=2 f=undefined
let [l,m,n,j,k] = "hello"; //字符串解构 
let [o,p,...q] = [1,2,3,4,5]; //q=[3,4,5];

深拷贝和浅拷贝

基本数据类型:都是深拷贝
引用数据类型:分深拷贝和浅拷贝

浅拷贝

// 只拷贝地址,不拷贝内容
var obj = {key:'value'}
var obj1 = obj
console.log(obj) // {key:'value'}
console.log(obj1) // {key:'value'}

obj.key = 'value1'
console.log(obj) // {key:'value1'}
console.log(obj1) // {key:'value1'}

obj1.key = 'value2'
console.log(obj) // {key:'value2'}
console.log(obj1) // {key:'value2'}

深拷贝

// 建立新地址,拷贝内容
var a = 1
var b = a
console.log(a) // 1
console.log(b) // 1

a = 2
console.log(a) // 2
console.log(b) // 1

b = 3
console.log(a) // 2
console.log(b) // 3
---------------------------------
// 方法1 循环赋值
var obj1 = {
    a:1,
    b:2
}
var obj2 = {}
for (var  key in obj1) {
    obj2[key] = obj1[key]
}
console.log(obj1) // { a:1, b:2 }
console.log(obj2) // { a:1, b:2 }

obj1.a = 3
obj1.b = 4
console.log(obj1) // { a:3, b:4 }
console.log(obj2) // { a:1, b:2 }

obj2.a = 5
obj2.b = 6
console.log(obj1) // { a:3, b:4 }
console.log(obj2) // { a:5, b:6 }
----------------------------------
var obj1 = {
    a:1,
    b:2,
    c:{
        d:3
    }
}
var obj2 = {}
function Obj(obj){
    for (var  key in obj) {
        if (obj[key] instanceof Object) {
            Obj(obj[key])
        } else {
            obj2[key] = obj[key]
        }
    }
    return obj2
}
console.log(Obj(obj1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值