JavaScript 属性的设置、获取、删除、判读及区别、遍历区别

发布于:2023-01-04 ⋅ 阅读:(266) ⋅ 点赞:(0)

//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'))