JS中的数据类型object

137 阅读2分钟

一、定义

  1. 用键值对(key:value 俗称属性名和属性值)来描述一个对象的特征(每一个对象都是综合体,存在零到多组键值对)
  2. { key : value , ...} 每组键值对是key : value 的格式,多组键值对用逗号分隔
  3. key 不能是引用数据类型,value 可以是任何的数据类型

二、声明对象的两种语法

例:

let person1 = {'name':'小红'}      //简写的方式
let person2 = new Object({'name':'小明'})         //标准的写法

细节:

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可以省略,省略之后就只能写标识符(就算省略了,键名也还是字符串)

三、键值对的增删改查

3.1 查/获取

  • 获取值 1、对象.属性名

基于这种方法操作,属性名就是.后面的这种方式,属性名不能是数字

2、对象[属性名]

基于这种方式操作,需要保证属性名是一个值(字符串/数字/布尔都可以) 如果不是值而是一个变量,它会把变量储存的值作为对象的属性名进行操作 如果属性名是数字则只能用此方法 如果指定的属性不存在,获取到的属性值是undefined(不会报错)

3.2 删

  • 真删除:彻底把属性从对象中移除 delete obj.name
  • 假删除:当前属性还存在,只不过属性值为空 obj.name = null

3.3 增|改

  • 单个赋值

对象的属性名(键)是不允许重复的

之前没有这个属性则为新增

之前有这个属性名,则是修改对应的属性值 例:

let obj = {
    sex: 0
};
//============================
obj.name = '张三';    //=> 新增
obj['name'] = "李四";    //=> 修改  因为此时obj中已经有name:‘张三’存在了,所以此次操作为修改
  • 批量赋值 使用Object.assign()

例:

Object.assign(obj,{age:18,gender:'man'})
  • 修改对象的隐藏属性

我们都知道每个对象都有一个隐藏属性__proto__指向的是原型,也可以说是共有属性

想修改它推荐使用Object.create

例:

let zhou = {'国家':'中国'}
let obj = Object.create(zhou)

意思就是创建obj对象时指定的原型为zhou。而zhou对象也有隐藏属性__proto__它指向了根原型,这就组合成了原型链。

附录

'属性名' in 对象对象.hasOwnProperty('属性名') 的区别

'toString' in obj     //返回true

不区分自有属性还是公共属性
onj.hasOwnProperty('toString') //返回false

区分自有属性还是公共属性 ,只有是自有的属性才返回true