JS 对象基本用法

138 阅读2分钟

声明对象的两种语法

含义

JavaScript 对象是拥有属性和方法的数据。例如现实生活中的汽车是一个对象,他的颜色、重量是他的属性,而方法有启动和停止等。对象就是无序的数据集合和键值对的集合。

写法

//字面量方式
let obj = {'name': 'xiaozhang', 'age': 24 }
//系统构造函数方式
let obj1 = new Object({'name': 'xiaozhang'})

tips:

  • 键名是字符串,不是标识符,是可以包含任何字符的。例如nameage就是字符串形式的
  • 引号可以省略,省略之后就只能写标识符形式的 需要注意的是即使引号省略了,键名也是字符串。

如何删除对象的属性

删除对象的属性的方法是:

delete obj.xxx
delete obj['xxx']

上面两种方式可以将对象的属性进行删除操作,但是需要注意的是属性值是undefined和不含属性名的。
区分:

  • 不含属性名的 可以使用in进行判断
    'xxx' in obj === false
  • 含有属性名,但是值是undefined 'xxx' in obj && obj.xxx === undefined
    注意obj.xxx === undefined不能断定'xxx'是否为obj的属性 例如
> let obj = {}
< undefined
> let obj2 = {'xxx': undefined }
< undefined
> obj.xxx === undefined
< true
> obj2.xxx === undefined
< true
//此时我们可以看到是无法进行断定xxx是否是obj的属性的

如何查看对象的属性

//查看自身所有属性
Object.Keys(obj)
//查看自身+共有属性
console.dir(obj)
或者自己依次用 Object.keys 打印出 obj.__proto__
//判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')

如何修改或增加对象的属性

let obj = {'name': 'xiaozhang'}
//直接修改
obj.name = 'zhang'
obj['name'] = 'zhang'
//变量的方式修改
let key = 'name'
obj[key] = 'xiaozhang'
//此时obj[key]中的key指的是变量。obj.name 等价于obj['name'],此时的name是字符串。obj.name是不等价于obj[name]。在上面中,obj[key]是等价于obj['name']的。
//批量赋值
Object.assign(obj, {age: 18, gender: 'man'}

'name' in obj和obj.hasOwnProperty('name') 的区别

  • 'name' in obj不会区分这个属性是自身的还是共有属性
  • obj.hasOwnProperty('name')可以区分。 使用obj.hasOwnProperty('name')的时候是可以进行区分的:
  • 当返回值是false时表示就是共有的属性
  • 当返回值是true的时候表示是自己的属性