JS对象

88 阅读1分钟

写法

// 第一种
let obj = {'name': 'du','age' :'18'}
// 第二种
let obj = new Object({'name':'du'})

细节

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可省略,省略之后就只能写标识符
  • 就算引号省略了,键名也还是字符串(重要)

删除对象属性

//删除属性
delete obj.xxx 
或delete obj['xxx']
//不含属性名
'xxx' in obj === false

  • 都表示删除obj的xxx属性
  • obj.xxx === undefined   不能断定 'xxx' 是否为 obj 的属性

查看对象的属性

Object.keys(obj) 查看所有属性

console.dir(obj) 查看自身+共有属性

obj.hasOwnProperty('toString') 判断一个属性是自身的还是共有的

  • 两种方法查看属性
  1. 中括号语法:obj['key']
  2. 点语法:obj.key 这里的key是字符串

obj[key] 中的key为变量

for in 遍历对象

var obj = { name: 'Jack', age: 18 };            for (var k in obj) {                console.log(k);//k是变量 、输出,得到的是属性名                console.log(obj[k]);//obj[k]得到的是属性值            }

修改或增加属性

  • 直接赋值

    let obj = {name: 'frank'} // name 是字符串 obj.name= 'frank' // name 是字符串 obj['name']= 'frank'

obj[name]= 'frank'// 错,因 name 值不确定

obj['na'+'me']= 'frank'
let key = 'name'; obj[key] = 'frank'

let key = 'name';obj.key= 'frank'// 错,因为 obj.key 等价于 obj['key']

  • 批量赋值

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

  • 无法通过自身修改或增加共有属性,可以使用obj.__proto__.toString = 'xxx'来修改,但不推荐,会引起许多问题。

  • 修改隐藏属性

    let common = {kind: 'human'} let obj = Object.create(common)

obj中的原型属性有common,并且依然有__proto__

  • 八种数据类型:number string undefined null bool symbol object bigint
  • 五种falsy值 : undefinde null 0 NaN ''(空字符串)