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也可以做属性名 ,但是其在使用时有点特殊。见文档

Symbol作为对象key时

JS-对象基本用法_第1张图片
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里每个对象都有一个隐藏属性
这个隐藏属性储存着其共有属性组成的对象的地址
这个共有属性组成的对象叫做原型
也就是说隐藏属性储存着原型的地址

let obj=Object.create({name:'jack'}) //在原型上添加属性 本身并没有 隐藏起来了
let obj1=new Object({name:'zhangdehsou'})

console.log(obj)
console.log(obj1)
JS-对象基本用法_第2张图片
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-对象基本用法_第3张图片
xmind

你可能感兴趣的:(JS-对象基本用法)