JS对象语法

127 阅读2分钟

对象的语法

7种数据类型

  1. number
  2. string
  3. symbol
  4. bool
  5. null
  6. undefined
  7. object

五个falsy值

  1. null
  2. undefined
  3. NaN
  4. 0
  5. ''(空字符串)

对象object(第七种数据类型,唯一一种复杂类型)

定义

无序的数据集合 键值对的集合,name和age是键,frank和18是值;

写法

  1. let obj = {'name': 'frank','age':18},简单写法常用
  2. let obj = new Object({'name':'frank'}),正规写法
  3. console.log({'name':'frank,age:18'}) 无论加不加单引号,name和age只能是字符串 name是属性名(key),frank是属性值(value),

若想用变量的值,则需要加[]中括号,

变量作属性名

之前都是用常量做属性名 let p1 = 'name' let obj = {p1:'frank'},属性名为'p1' let obj = {[p1]:'frank'},这样写,属性名为'name'

对比

不加[]的属性名会自动变成字符串; 加了[],则会当作变量求值;

对象的隐藏属性

JS中每一个对象,都有一个隐藏属性; 这个隐藏属性储存着共有属性组成的对象的地址 这个共有属性组成的对象叫做原型 也就是隐藏属性储存着原型的地址 代码示例 var obj = {}

删除属性

  1. obj.nam e= undefined *name的属性名在,但是属性为undefined;
  2. delete obj.namename的属性名和值都被删除

delete obj.xxx 或 delete obj ['xxx'] 即可删除obj的xxx属性; 请区分[属性值为 undefined] 和 [不含属性名]

不含属性名

'xxx' in obj === false

含有属性名,但是值为undefined

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

读属性

查看自身属性

let obj2 = {'name': 'frank','age':18}

  1. objects.keys(obj2)得出(2)["name","age"]
  2. objects.values(obj2)得出(2)["frank","18"]
  3. obj2得出['name': 'frank','age':18]
  4. obj.entries(obj2)(2)[Array(2),Array(2),]
  5. obj['name']得出"frank"(只查看一个属性的值)
  6. obj.name得出"frank"(只查看一个属性的值)
  7. obj['na'+'me']

image.png

查看共有属性

  1. console.dir(obj2)
  2. obj2.proto(此法不推荐)

判断一个属性是自身的还是共有的

obj.hasOwnProperty('toString') 若是name自身的,则为true; 若是toString,则为false

原型

原型也是对象

修改或增加属性

单个直接添加法:obj.gender = '男' 多个添加法:Object.assign(obj,{p1:1,p2:2,p3:3,p4:4})

无法通过自身修改或增添属性