//1.设置
var key = "mykey"
var obj1 = {}
obj1.a = "1";
obj1['j-d'] = "2";
obj1[key] = 3; //动态的key名
obj1.key = 4;
console.log('obj1', obj1)
//2.获取
console.log("获取", obj1['j-d'], obj1[key])
//3.删除
delete obj1.key;
console.log(obj1, "obj1")
//4.添加
Object.assign(obj1, {
addKey: "添加了一个key"
})
obj1.addKey2 = '添加的第二个key'
console.log(obj1)
//caniuse 网站 可以用来查看兼容性
//可枚举 for in 可迭代 for of
//5.遍历
for(let key in obj1) { //es5
console.log('key', key)
console.log('value:', obj1[key])
}
//遍历 es6 for of:必须遍历可迭代对象 iterable:是否可迭代的
//array map set。。 天生具备可迭代性
//对象需要Object.values(obj1)) 处理一下,因为对象的不是可迭代的
//Object.keys //es5
//Object.values //es6
for(let value of Object.values(obj1)) { //es5
console.log('value', value)
}
//6.判断和区别(主要是判断属性是存在原型上还是在自身)
function Person() {}
Person.prototype.name = "green"; //原型賦值 可以从上向原型找
let p1 = new Person();
//判断是否存在name属性:自动查找
//方式一 :一般用来排除 undefined和null这样子的值console.log('1',!!p1.name) //!!p1.name判断是否有值,在判断空字符串还是有内容的字符串时不能用,返回true和false或者可以p1.name使用三元表达式判断是否有值。
//方式二: 看是否存在该属性
console.log('2','name' in p1)//判断name是否在p1里面
//方式三: 当前对象的原型数据可能不稳定,判断方式 更为精确:禁 止向原型查找,仅仅找属于自己的属性
p1.age=123; //实例赋值 只能找自身 不能找原型的
console.log('3:非原型name',p1.hasOwnProperty('name')) //自身是否有这个属性 hasOwnProperty区分原型还是自身
console.log('4:非原型age',p1.hasOwnProperty('age'))