JS对象基本用法

148 阅读2分钟

声明对象的两种语法

1.
let obj={'name':'summercoming8','age':16}
2.
let obj=new Object({'name':'summercoming8'})

属性名

键名,也就是属性名,是字符串!是字符串!是字符串!

这个键名的引号是可以省略掉的,「但是省略之后键名仍然是字符串」并且命名就必须符合标识符的命名规范。而在使用引号时,甚至可以取出像'2'、'国家'这样的键名。可以通过Object.keys(obj)来查看obj对象存在的属性名。

//在chrome进行调试
var obj={name:'666',age:'18'}
obj//{name: "666", age: "18"}
Object.keys(obj)//(2) ["name", "age"]
//可以看到当用keys打出来的时候还是自动给键名包上了引号,而单单打出obj的时候不会自动加上

所有属性名会自动变成字符串

let obj={
   1:'a',
   1.1:'a',
   1e2:'a',
   .234:'a',
   0xFF:'a',
}
Object.keys(obj)//(5) ["1", "100", "255", "1.1", "0.234"]
//科学记数法、16进制、小数等都会先转为相应的数字再转为字符串

当属性名要变量

加[]:加了[]会被当作变量求值,变量值如果不是字符串,也会被自动转为字符串

let p='name'
let obj={p:'666'}
Object.keys(obj)//["p"]
let obj1={[p]:'666'}
Object.keys(obj1)//["name"]

对象对属性的增删改查

如何删除对象的属性

  1. delete obj.xxx
  2. delete obj['xxx']注意:加引号,不然会去找名为xxx的变量的值是啥 ps:如果删除本来就没有的属性,并不会报错

如何查看对象的属性

查看所有属性

  • 查看自身所有属性:Object.keys(obj)
  • 查看自身+共有属性console.dir(obj)
  • 查看是不是自身的属性 obj.hasOwnProperty(obj)

查看属性

  1. obj['key']
  2. obj.key

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

  1. 直接赋值

    obj.name = '666' 这个name是字符串

    obj['name']='666' 2.批量赋值 Object.assign(obj,{......})

  2. Object.defineProperties(obj, props)

var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  obj// {property1: true, property2: "Hello"}

});

修改涉及到共有属性(共有属性组成的对象是原型)

对象无法通过自身对共有属性进行修改和增加

(倘若一定要去改共有属性,就是每个对象都有的__proto__里的东西):

  1. obj.__proto__.toString='xxx'(不建议)
  2. Object.prototype.toString='xxx'

修改涉及到隐藏属性

let obj = {name:'小明'}
let obj2 = {name: '小红'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common//于是小明和小红都有了人类的共有属性(不推荐)

let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'
//要改一开始就给改改好比较好

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

in是查看自身和继承对象的是否有某属性的,hasOwnProperty是查看对象自身是否有某项属性的