JS 对象基本用法

167 阅读2分钟

Object唯一复杂类型

定义

无序数据集合+键值对集合

声明

  • let obj={'name':'frank','age':18} (name不加‘’也行)

  • let obj=new Object({'name':'frank','age':18})

  • console.log({'name':'frank','age':18})

属性名

属性名是字符串,不是标识符,没有组成规则 -->''空字符串也行,emoji也行

引号省略,但是他还是字符串;特殊字符不能省,比如中文

属性名例子

1e2转换成数字100变成字符串

1e-2,0xf,.234f同理

let a='xxx'

var obj = {

a:1111

}

属性名是a
let a='xxx'

var obj = {

[a]:1111

}

属性名是xxx 求a值,转换成字符串当做名字

symbol也可以是属性名,迭代时用到,前端不流行迭代,基本不用

原型

对象隐藏属性__proto__

隐藏属性存着原型地址

增删改查

删除

  • delete obj.name

  • delete obj['name']

删除属性name

检查属性是否存在

'name' in obj (要加‘’,不然当成变量)


  • Object.keys(obj) 属性名

  • Object.Values(obj) 属性值

  • obj 属性名+属性值

  • Object.entries(obj) 属性名+属性值

不显示共有属性

查看共有属性

obj.__proto__(不推荐,不同浏览器名字可以不一样)

conaole.dir(obj)

查看是自身属性/原型属性('name' in obj和obj.hasOwnProperty('name') 的区别)

in 不会区分自身属性/原型属性

obj.hasOwnProperty('name') 自身true 非自身false(包括原型属性)

查看原型的隐藏属性

原型也是对象,有隐藏属性

原型的隐藏属性为空null,对象的根(null不是undefine,说明被人为指定了空)

增,修

有则改,没有则增

赋值

初始化赋值

let obj = {name:'frank'}//初始化赋值

单个属性赋值

obj.name='frank'

批量赋值

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

修改原型

不推荐修改原型

  • obj.__proto__.toString = 'xxx'不推荐

  • window.Object.prototype.toString = 'yyy'

修改原型链

对象和原型之间再加对象

  • obj.__proto__={name:'frank'}不推荐用proto,性能低
  • let common={age:18,gender:'man'} var person = object.creat(common)推荐使用

var person = object.creat(common,{name:{valule:'frank'}}) 这个是person的初始化修改属性,比较麻烦,非初始化修改属性

附加tips

console.log返回undefined