JS 对象基本用法

221 阅读2分钟

JS对象的基本用法

声明一个对象的语法

//方法一
let obj = {'name':'李华',age:18}\
//方法二
let ob = new Object{'name':'李华',age:18}

注意:

  • 方法一等价于方法二。
  • 对象的键名是字符串,不是标识符。
  • 引号可省略,省略后,只能使用标识符的规则取名。

查看对象的属性(键名和值)

  • Object.keys可以查看对象的所有键名;
  • Object.values可以查看对象的所有值;
  • console.dir() 可以查看一个对象的所有自身属性+共有属性; image.png

查看对象的某一个具体的属性

let obj = {'name':'李华',age:18}
obj.name;//方法一
//李华
obj['name'];//方法二
//李华

初学者推荐使用第二种方法,可以帮助记忆这里的name是字符串。

删除对象的属性

delete obj.name === delete obj['name'] 删除对象的name属性
注意:
删除对象的属性不能用赋值为undefined的方法。
undefined只是让该值为空,属性仍然存在,但值为空

image.png

修改或者增加对象的属性

赋值法:该属性不存在则添加该属性,存在则修改该属性

image.png 注意:\

obj.name ==== obj['name']
但:obj.name !== obj[name]

obj[name]里的name是变量名,且未定义

批量赋值:Object.assign(对象名,{属性名:值,属性名:值})

let obj = {'name':'李华',age:18}
Object.assign(obj,{'like':'篮球','school':'清华'})
//{name: '李华', age: 18, like: '篮球', school: '清华'}
obj
//{name: '李华', age: 18, like: '篮球', school: '清华'}

判断属性是否在对象中的方法

方法一:属性名 in 对象名

let obj = {'name':'李华',age:18}
'like' in obj
//false

方法二:对象名.hasOwnProperty(属性名)

let obj = {'name':'李华',age:18}
obj.hasOwnProperty('age')
//true

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

hasOwnProperty()  方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性。所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性。

和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。 即使属性的值是 null 或 undefined,只要属性存在,hasOwnProperty 依旧会返回 true

'toString' in obj
//true,obj有继承Object的toString方法
obj.hasOwnProperty('toString')
//false,obj继承了该方法,但hasOwnProperty忽略了原型上的方法,只在自身查找

原型

每个对象都有原型

  • 原型里存着对象的共有属性
  • 比如obj的原型就是一个对象
  • obj.proto__存着这个对象的地址
  • 这个对象里有toString/constructor等属性

对象的原型也是对象

  • 所有对象的原型也有原型
  • obj={}的原型即为所有对象的原型
  • 这个原型包含所有对象的公共属性,是对象的根
  • 但这个原型也有原型,是null