04 js对象

js对象

对象的属性

创建一个对象

// 创建对象那
let obj = Object()
// 添加属性
obj.name = "孙悟空"
obj.age = 18
obj.gender = "男"
// 修改属性
obj.name = "tom"
// 删除属性
delete obj.age
console.log(obj)

对象中可以存储多个各种种类的数据, 对象中存储的数据,我们称为, 属性

向对象中添加属性: 对象.属性名(key) = 属性值(value)

读取对象中的属性: 对象.属性名 (如果找不到该属性不会报错, 而是返回undefined)

对象的属性名, 属性值

let obj = Object()
let str = 'address'
obj["str"] = "孙悟空" //str : "孙悟空" --> obj.str = "孙悟空"
obj[str] = "孙悟空" //address : "孙悟空" --> obj.address = "孙悟空"
obj.a = "aa"
obj.b = true
obj.c = 123
obj.d = Object()
obj.d.name = "张三"
console.log(obj)
console.log("str" in obj) //检查obj对象中是否有str这个属性

使用[]来操作对象的属性, 可以使用变量, 对象的属性值可以是任何的数据类型, 也可以是一个对象, console.log("属性名" in 对象)可以用来检查一个对象中是否有某个属性

对象字面量创建对象 :

let obj = {
  name: '张三',
  age: 20,
  ["gender"]: '男',
  hello: { // obj的属性为一个 hello 对象
    a : 1,
  }
}

使用对象字面量创建对象, 可以直接在 {}里向对象中添加属性

枚举属性

使用for-in语句来获取对象中的全部属性

let obj = {
  name: '张三',
  age: 20,
  ["gender"]: '男',
  hello: {
    a : 1,
  }
}
for (let i in obj) { 
 //获取obj对象中的全部属性(包括hello下的属性)并赋值给变量 i
  console.log(i, obj[i]);
}

for-in 的循环体会执行多次, 有几个属性会执行几次, 每次执行时, 都会将一个属性值赋给我们定义的变量, 符号添加的属性不可以被枚

可变类型

不可变类型

let a = 10; //a --> x11(内存地址)
let b = 10; //b --> x11
a = 12 //a --> x12(内存地址指向x12), 不会对x11地址的值产生任何影响
console.log(a, b)

原始值属于不可变类型, 一旦创建无法修改它的值

在内存中不会存在重复的原始值

可变类型

let obj = Object() //obj --> x010
obj.name = "孙悟空"
obj.age = 15
let obj2 = Object()//obj2 --> x011
let obj3 = Object()//obj3 --> x012
//一但创建一个新的对象 就会在内存中立即创建一个新的内存空间地址
console.log(obj2 == obj3) //false
let obj4 = obj //obj4 --> obj(x010)指向obj的内存地址
console.log(obj == obj4)//true
obj4.name = "猪八戒" //当修改一个对象的属性时, 所有指向该对象的变量(内存地址)都会发生改变
console.log(obj, obj4)//name属性都为猪八戒

对象创建完成后, 可以任意的添加删除修改对象中的属性

如果有两个变量(obj, obj4)都指向同一个对象时, 通过一个变量修改对象的属性时, 对另一个变量也会产生影响

变量与对象

const obj = {
  name: "孙悟空"
}
let obj2 = obj

obj2.name = "猪八戒" //修改对象
obj2 = null //修改变量(指针释放, 不在指向obj所在的地址)
obj2 = {  //新的对象, 不会对obj产生影响
  name: "猪八戒"
}
console.log(obj, obj2)

修改对象: 修改对象时, 如果其他变量(内存地址)指向该对象, 则所有变量都会受到影响

修改变量: 修改变量时, 只会影响当前的变量(通过const可以控制该变量不能再次被赋值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值