JS-对象基本用法

定义

  1. 无序的 键(key)值(value)对组合
  2. 声明对象的方式
let obj = { 'name': 'zhangdeshou', 'age': 18 } let obj = new Object({'name': 'zhangdeshou'}) let obj=Object.create({name:'saint'})// 悄悄话,如此创建的对象在原型链上哦 console.log({ 'name': 'zhangds, 'age': 18 })//不声明直接使用

中括号语法:obj['key']----推荐
点语法:obj.key
其它 :obj[key]---key值是一个变量是使用此 语法
注obj['name'] == obj.name != obj[name] name 是字符串
obj[key]:value ----[]号表示属性名是变量,先求值,再转字符串
  1. 细节
key是字符串,自然可以包含任何字符,请习惯性的加引号''
当然如果省略引号的话,其书写规范应该满足 标识符的书写规范
除了字符串,Symbol也可以做属性名 ,但是其在使用时有点特殊。见文档
JS-对象基本用法
文章图片
Symbol作为对象key时
JS-对象基本用法
文章图片
image.png
let a=Symbol() let obj={ [a]:'zds' } console.log(obj) //{Symbol(): "zds"}

奇怪的属性值
所有属性名都会自动变成字符串
let obj ={ 1:'a', 1e2:true,//会自动计算为100再转为字符串 0XXF:false //会自动转化为10进制再转为字符串 }

原型与原型链
【JS-对象基本用法】隐藏属性
JS里每个对象都有一个隐藏属性
这个隐藏属性储存着其共有属性组成的对象的地址
这个共有属性组成的对象叫做原型
也就是说隐藏属性储存着原型的地址
let obj=Object.create({name:'jack'}) //在原型上添加属性 本身并没有 隐藏起来了 let obj1=new Object({name:'zhangdehsou'})console.log(obj) console.log(obj1)

JS-对象基本用法
文章图片
image.png 增 改 直接赋值
let obj = {name:'frank'}
obj.name = 'jane'
obj['name'] ='jane'
obj.['na'+'me'] ='jane'
let key = 'name' obj[key] =='jane'
错误 obj[name] ='jane' --因为name是一个变量
批量赋值
Object.assign(obj,{1:'p1',2:'p2'})
共有属性的增改(一般不要修改)
无法通过自身修改或增加共有属性
修改原型的共有属性 (不推荐)
obj.proto.toString ='xxx'
window.Object.prototype.toString = 'xxx'
obj.proto=null ---删除共有属性,值也可以是一个对象
Object.create let obj = Object.create(common)
删 obj.name = undefined ---只删除属性值
delete obj.name ---删除属性名和属性值
delete obj['name'] ---删除属性名和属性值
'name' in obj --- 检查obj是否含有属性名
'name' in obj && obj.xxx ===undefined ---有属性名,但是没有值
查 读取对象自身所有的属性 Object.keys(obj)
读取对象的属性值 Object.values(obj)
读取对象的属性名和属性值 Object.entries(obj) ----得到是length个数组
读取共有属性 console.dir(obj)或者obj.proto (不推荐)
'toString' in obj ---检查是否有这个属性--自身属性和共有属性都算
obj.hasOwnProperty('name') ---检查这个属性是否是自身属性
'name' in obj和obj.hasOwnProperty('name') 的区别 都是两种查看属性是不是在对象里的方法
前者自身属性和共有属性都返回true,后者仅仅是自身属性才返回true

JS-对象基本用法
文章图片
xmind

    推荐阅读