JavaScript对象的增删改查

169 阅读1分钟

对象

  1. 复杂数据类型
  2. 无序的数据集合
  3. 键值对的集合
  4. 写法
  let obj1 = {}
  let obj2 = new Object({})
  1. 键名是字符串不是标识符,可以包含任意字符;引号可以省略,省略之后就只能写标识符;就算引号省略了,键名还是字符串字符串字符串!!!!!
  2. 用变量a的值作为属性名
  let a = 'xxx'
  var obj = {
      [a]:1234//加了[]会当做变量求值,属性名[1+2+3]则会被当做'6'
  }
  1. 除了字符串,symbol也能做属性名

删除属性

  let obj = {
     'name':'小红'
  }

  delete obj.name
  delete obj['name']

查属性

  Object.keys(obj)//查看自身所有属性
  Object.values(obj)//所有值
  Object.entries(obj)//所有键值对
  console.dir(obj)//查看自身和公有属性

修改或增加属性

  //直接赋值
  //批量赋值
  Object.assign(obj,{age:18})
  //无法通过对象自身修改或增加公有属性(原型)
  obj.toString='xxx'//不会更改原型的toString方法,只会给obj添加一个值为'xxx'的toString属性
  //修改或增加原型上的属性
  obj.__proto__.toString='xxx'//不推荐使用
  Object.prototype.toString='xxx'
  //一般来讲不要修改原型
  
  // 修改原型
  var Object.create({//原型对象内容},{name:{value:'小兰'})
  //es6新方法,创建指定原型的对象

判断某一属性是否存在

   'xxx' in obj

判断某一属性是否自身属性

   obj.hasOwnProperty('xxx')//可以判断'xxx'是自身属性还是公有属性,
   //同时,如果'xxx'不存在也会返回false。
   //因此,当返回false是,应注意,此时'xxx'是公有属性还是不存在。

注意

  obj.name等价于obj['name'],其中name是字符串,而不是变量
  什么时候不加单引号?
  let name = '小绿'
  obj[name]等价于obj['小绿']