JS 对象基本用法

122 阅读2分钟

对象的定义

  • 无序的数据集合
  • 键值对的集合

写法

let obj = {'name':'xiaoming','age':18}

let obj = new Object({'name':'xiaoming','age':18})

注意:

  • 键是字符串,不是标识符,键中可以包含任意字符。
  • 键的引号可以省略,省略之后只能写标识符,但即便省略引号,键也还是字符串。

如何删除对象的属性

  • 删除对象的属性

      delete obj.xxx
    
      delete obj.['xxx']
    

如何查看对象的属性

  • 查看属性

      obj.key //点语法
    
      obj.['key'] //中括号语法
    
      obj.[key]  //这是获取对象的变量key值
    

注意:

    obj.name 等价于 obj.['name'](字符串);

    obj.name 不等价于 obj.[name](变量值)

    [name]这里的name是字符串,不是变量;
  • 查看自身所有属性

      Object.keys(obj)
    
  • 查看自身及共有属性

      console.dir(obj)
    

如何修改或增加对象的属性

直接赋值

let obj ={name:'wang'} //name 是字符串

obj.name='wang'  //name 是字符串

obj['name'] = 'wang'

obj[name] = 'wang'  //错误的写法,因为name的值不确定

obj['na'+'me'] = 'wang'

let key = 'name'; obj[key] = 'wang'

let key ='name'; obj.key='wang' //错误,因为 obj.key 等价于 Obj['key]
  • 批量复制

    Object.assign(obj,{age:18,gender:'man'})

  • 修改或增加共有属性

无法通过自身修改或增加共有属性

let obj = {}, obj2 = {} //共有 toString 属性

obj.toString = 'xxx' 只会改obj自身属性

obj2.toString 还是在原型上
  • 如果要修改或增加原型上的属性

      obj.__proto__.toString = 'xxx'  //不推荐用,一般不建议修改原型,会引起很多问题
    
      推荐使用:
      window.Object.prototype.toString = 'yyy'
    

'name' in obj和obj.hasOwnProperty('name') 的区别

  • in判断的是对象的所有属性,包括对象实例及其原型的属性;

      var obj = {
       name:'fei'
      }
      console.log('toString' in obj)//true
    
      *: 对象的原型链上存在toString方法,所以in操作不管是不是原型链上,只要存在这个属性,返回的就是true
    
  • hasOwnProperty则是判断对象实例的是否具有某个属性。

      var obj = {
      name:'fei'
      }
      console.log(obj.hasOwnProperty('name'))  //true
      console.log(obj.hasOwnProperty('toString'))  //false
    
      *: 这个方法只是表明实例对象的属性,不包括原型链上的属性。