JS 对象基本用法

198 阅读2分钟

Object对象

定义

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

语法

let obj={'name':'yongying','age':18}
let obj=new Object({'name:'yongying})
console.log({'name':'yongying',age:18})

细节

  • 键 名是字符串,不是标识符,包含任意字符

  • 可以省略,省略后就只能写标识符

  • 引号省略了,键名也还是字符串(重要)

奇怪的属性名

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

let obj={
    1:'a'
    3.2:'b'
    1e2:ture
    1e-2:ture
    .234:ture
    OXFF:ture
    
};

Object.key(Obj)可以得到obj的所有key

Object.keys(obj)

=>['1','100','255','3.2','0.01','0.234']

变量作属性名

let p1='name'

let obj={p1:'sss'}这样写,属性名为'p1'

let obj={[p1]:'sss'}这样写,属性名为'name'

对比

  • 不加[]的属性名会自动变成字符串

  • 加了[]的则会当做变量求值

  • 值如果不是字符串,则会自动变成字符串

let a='xxx'
var objo={
    'a':111
}

得到结果{a:111}

用变量的值作Key

var obj={
    [a]:111
}

结果{xxx:111}

对象的隐藏属性

隐藏属性 JS中的每一个对象都有一个隐藏属性

这个隐藏属性存贮着共有属性组成的对象的地址

这个共有属性存贮着原型的地址

代码示例

var Obj={}
obj.toString()//不报错

不报错是因为obj的隐藏属性对象上有toString()

增删改查

下面代码可以删除xxx的属性名与属性值

delete obj.xxx
delete obj['xxx']

下面只删除属性值

obj.name=undefined

不含属性名

'xxx'in obj==false

不含属性名

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

含属性名但值为undefined

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

不能断定'xxx'是否为obj的属性

查看是否删除了

看返回值false 已经不在了,ture 表示存在

'name'in obj

看自身所有属性

Object.keys(obj)

查看自身共有属性

console.dir(obj)
Object.keys 打印出obj._proto_
判断一个属性是自身的还是共有的
Obj.hasOwnProperty('toString')

###两种方法看属性 中括号法:obj['key'] 点语法:obj.key

## 修改或增加属性
直接赋值
```javascript
let obj={name:'a'}   //name是字符串
obj.name ='a'    //name是字符串
obj['name']='a'
obj['na'+'me']='a'
let key='name';obj[key]='frank'
let key='name';

批量赋值

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

修改或增加共有属性

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

let obj={},obj 2={}//共有toString

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

obj 2.toString还是在原型上

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

obj.proto.toString='xxx

Object.prototype.toString ='xxx'