写代码啦
《JS 对象基本用法》
回复数(0) 浏览数(74)
{{topic.upvote_count || 0}} 编辑 回复

声明对象的语法

let obj = {  'name' : 'kfc', 'age': 18}  //简略写法
let obj = new Object{  'name' : 'kfc', 'age': 18}  //规范写法
console.log({  'name' : 'kfc', 'age': 18})  //该语句创建的对象没有名字
  • 键名是字符串不是标识符,可以包含任意字符
  • 引号可以省略,省略之后就只能写标识符
  • 就算是引号省略了键名还是字符串

所有属性名都会自动变成字符串
Object.keys(obj)可以得到obj的所有key(键/属性名)
属性名加[]可实现变量作属性名,如:

let obj = { [name] : 'kfc', 'age': 18}

对象的隐藏属性

js每一个对象都有隐藏属性,隐藏属性储存着其原型的地址

var obj={}
obj.toString

该操作不会报错,因为obj的隐藏属性对应的原型上有toString()

如何删除对象的属性

delete obj.xxx
或者
delete obj.['yyy']

不含属性名

'xxx' in obj ===undefined

含有属性名,但值为undefined

‘xxx’ in obj && obj.xxx === undefined
要注意obj.xxx === undefined不能判断‘xxx’是否为obj的属性

如何查看对象的属性

  • 查看自身所有属性Object.keys(obj)
  • 查看自身+共有属性console.dir(obj)或者Object.keys(obj);Object.keys(obj.__proto__)
  • 判断一个属性是自身的还是共有的obj.hasOwnProperty(toString)

查看属性两种方法:中括号语法obj['xxx']点语法obj.xxx
obj['xxx']等同于obj.xxx,但不等同于obj[xxx],前两者xxx是字符串,后者xxx是变量

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

  • 直接赋值
    let obj = { name : kfc } //name是字符串 obj.name = 'kfc' //name是字符串 obj['name'] = 'kfc' obj.['na'+'me'] = 'kfc' let key = 'name' ; obj[key]='kdc'
  • 批量赋值
    Object.assign(obj,{ name:'kfc', age: 18 })
  • 修改或增加共有属性
    无法通过自身修改或增加共有属性,可通过修改或增加prototype实现
    obj,__proto__='xxx' //虽然也可以,但不推荐修改__proto__ Object.prototype.toString='xxx' //推荐这个
    一般来说不要修改原型,会引起很多问题
  • 修改隐藏属性
    let obj = { name ='kfc' } let common = { kand = 'huni' } obj.__proto__= common
    不推荐使用__proto__推荐使用Object.creat
    let obj.Object.creat(common)

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

'name' in obj可以判断obj对象不含xxx属性
obj.hasOwnProperty('name')用来判断一个属性是obj自身的还是共有的

{{topic.upvote_count || 0}}

声明对象的语法

let obj = {  'name' : 'kfc', 'age': 18}  //简略写法
let obj = new Object{  'name' : 'kfc', 'age': 18}  //规范写法
console.log({  'name' : 'kfc', 'age': 18})  //该语句创建的对象没有名字
  • 键名是字符串不是标识符,可以包含任意字符
  • 引号可以省略,省略之后就只能写标识符
  • 就算是引号省略了键名还是字符串

所有属性名都会自动变成字符串
Object.keys(obj)可以得到obj的所有key(键/属性名)
属性名加[]可实现变量作属性名,如:

let obj = { [name] : 'kfc', 'age': 18}

对象的隐藏属性

js每一个对象都有隐藏属性,隐藏属性储存着其原型的地址

var obj={}
obj.toString

该操作不会报错,因为obj的隐藏属性对应的原型上有toString()

如何删除对象的属性

delete obj.xxx
或者
delete obj.['yyy']

不含属性名

'xxx' in obj ===undefined

含有属性名,但值为undefined

‘xxx’ in obj && obj.xxx === undefined
要注意obj.xxx === undefined不能判断‘xxx’是否为obj的属性

如何查看对象的属性

  • 查看自身所有属性Object.keys(obj)
  • 查看自身+共有属性console.dir(obj)或者Object.keys(obj);Object.keys(obj.__proto__)
  • 判断一个属性是自身的还是共有的obj.hasOwnProperty(toString)

查看属性两种方法:中括号语法obj['xxx']点语法obj.xxx
obj['xxx']等同于obj.xxx,但不等同于obj[xxx],前两者xxx是字符串,后者xxx是变量

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

  • 直接赋值
    let obj = { name : kfc } //name是字符串 obj.name = 'kfc' //name是字符串 obj['name'] = 'kfc' obj.['na'+'me'] = 'kfc' let key = 'name' ; obj[key]='kdc'
  • 批量赋值
    Object.assign(obj,{ name:'kfc', age: 18 })
  • 修改或增加共有属性
    无法通过自身修改或增加共有属性,可通过修改或增加prototype实现
    obj,__proto__='xxx' //虽然也可以,但不推荐修改__proto__ Object.prototype.toString='xxx' //推荐这个
    一般来说不要修改原型,会引起很多问题
  • 修改隐藏属性
    let obj = { name ='kfc' } let common = { kand = 'huni' } obj.__proto__= common
    不推荐使用__proto__推荐使用Object.creat
    let obj.Object.creat(common)

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

'name' in obj可以判断obj对象不含xxx属性
obj.hasOwnProperty('name')用来判断一个属性是obj自身的还是共有的

74
回复 编辑