JS 对象基本用法

对象

定义

  1. 无序的数据集合
  2. 键值对的集合

一、声明对象的两种语法

let obj = {  'name' : 'kfc', 'age': 18}  //简略写法
let obj = new Object{  'name' : 'kfc', 'age': 18}  //规范写法
console.log({  'name' : 'kfc', 'age': 18})  //该语句创建的对象没有名字
  • 键名是字符串不是标识符,可以包含任意字符
  • 引号可以省略,省略之后就只能写标识符
  • 就算是引号省略了键名还是字符串

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

Object.keys(obj)可以得到obj的所有key(键/属性名)

属性名加[]可实现变量作属性名,如:

let obj = { [name] : 'kfc', 'age': 18}

二、如何删除对象的属性

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

即可删除 obj 的 xxx 属性

请区分「属性值为 undefined」和「不含属性名」

不含属性名

‘xxx’ in obj === false

含有属性名,但是值为 undefined

‘xxx’ in obj && obj.xxx === undefined

注意 obj.xxx === undefined
不能断定 ‘xxx’ 是否为 obj 的属性

三、如何查看对象的属性

  1. 查看自身所有属性

    Object.keys(obj)

  2. 查看自身+共有属性

    console.dir(obj)

或者自己依次用 Object.keys 打印出 obj.proto

  1. 判断一个属性是自身的还是共有的

    obj.hasOwnProperty(‘toString’)

  2. 两种方法查看属性

  • 中括号语法:obj[‘key’]
  • 点语法:obj.key
  • 坑新人语法:obj[key] // 变量 key 值一般不为 ‘key

请优先使用中括号语法

  • 点语法会误导你,让你以为 key 不是字符串
  • 等你确定不会弄混两种语法,再改用点语法

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

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

let obj = {}, obj2 = {} // 共有 toString
obj.toString = 'xxx' 只会在改 obj 自身属性
obj2.toString 还是在原型上

我偏要修改或增加原型上的属性

obj.__proto__.toString = 'xxx' // 不推荐用 __proto__
Object.prototype.toString = 'xxx' 

一般来说,不要修改原型,会引起很多问题

五、’name’ in obj和obj.hasOwnProperty(‘name’) 的区别

'name' in obj//可以判断obj对象不含xxx属性
obj.hasOwnProperty('name')//用来判断一个属性是obj自身的还是共有的

https://juejin.im/post/5ead0a89f265da7b9b5edb52

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论