JS 对象基本用法

307 阅读2分钟

JS对象

无序的数据集合


键值对的集合

声明对象的两种语法

let obj = {  'name' : 'kfc', 'age': 18}  //简略写法
let obj = new Object{  'name' : 'kfc', 'age': 18}  //规范写法
console.log({  'name' : 'kfc', 'age': 18})  //该语句创建的对象没有名字

细节

  • 键名是字符串不是标识符,可以包含任意字符
  • 引号可以省略,省略之后就只能写标识符
  • 就算是引号省略了键名还是字符串

属性名

每个key都是对象的属性名

属性值

每个value都是对象的属性值

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

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

如何删除对象的属性

语法

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

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

细节

  • 判断对象中还有没有某个属性名

'xxx' in obj === false

  • 含有属性名,但是值为 undefined

'xxx' in obj && obj.xxx === undefined

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

如何查看对象的属性

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

或者
Object.keys打印出obj._ _ proto_ _

  • 如何判断一个属性是自身的还是共有的 obj.hasOwnProperty('XXX')

  • 两种方法查看属性

1 中括号语法obj['key']

2 点语法obj.key

3 坑新人语法:obj[key] // 变量 key 值一般不为 'key

  • 请优先使用中括号语法

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

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

修改自身的属性

  • 改单个属性的属性值

let obj = {name: 'whatever'} // name是字符串
或者
obj.name = 'whatever'// name是字符串
或者
obj['name'] = 'whatever'
或者
obj['na'+'me'] = 'whatever'

  • 批量修改属性的属性值

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

  • 修改共有属性

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

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

let obj = Object.create(common)

let common = {hairColor: 'black', country: '中国'};
let obj = Object.create(common);
obj.name = '小红';
let obj2 = Object.create(common);
obj2.name = '小王';
Object.assign(obj2, {age: 15, city: '广州'});
console.log(obj.country); // "中国"
console.log(obj2.country); // "中国"


## 'name' in obj和obj.hasOwnProperty('name') 的区别
* `'name' in obj`查看属性`name`是否在`obj`里。

* `obj.hasOwnProperty('name')`用来检测`obj`是否含有特定的自身属性`name`。
这个方法会查找一个对象是否有某个属性,但是不会去查找它的原型链。