JS对象基本用法

声明对象的两种语法

let obj = {
  'name' :  '这是一个对象'
}
let obj = new Object({
  'name' : '这是一个对象'
})

1. key是字符串的情况:
key是字符串,上面的例子中name就是那个key,哪怕我没写引号,它也会自动变成字符串。
在没有加引号的情况下,如果key的值是可以计算的,它会先计算然后再转为字符串。这很烦,所以如果不是必须的,一定要记得给key加引号。
2. key是变量的情况:

let a = "name"
let obj = {
  [a]: '这是一个对象'
}

用中括号把变量名括起来就可以了,这样就会先计算括号里的变量值
3. key是symbol的情况:

let a = Symbol()
let obj = {
  [a]: '这是一个对象'
}

如何删除对象的属性

let 教室 = {
  '学生': 45,
  '老师': 1,
  '课桌':true,
  '凳子' : true,
  '窗户': true,
  '优秀班级': false,
}

删除学生、老师、优秀班级属性

教室.学生 = undefined//删除属性值
delete 教室.老师//删除属性
delete 教室.优秀班级//删除属性

如何查看对象的属性

Object.keys(教室)
Object.values(教室)
Object.entries(教室)

如果还需要查看共有属性可以使用:

console.dir(教室)

或者,直接打印:

console.log(教室.__proto__)

如何判断属性是不是对象的:
我们可以用下面这种方法,但是这种方法没办法知道这个属性是对象自己的还是原型

'name' in obj//没办法知道这个属性是自己的还是原型的

hasOwnProperty()方法可以帮助判断这个属性是不是对象自己的:

教室.hasOwnProperty('toString')

查看单个属性值

教室.学生
教室['老师']

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

  1. 通过取值的方式直接赋值
教室.优秀班级 = false
教室['优秀班级'] = true
  1. 批量赋值
Object.assign(教室,{扫帚:true,拖把:true,水桶:true})
  1. 共有属性能改么?
教室.toString = "修改1?"

”没有修改”,读的时候可以读到共有属性,但是写的时候只能写在自己身上。
实在想改,就要去原型上改:

我.__proto__.toString = "修改2?"

"修改成功,但不推荐"!

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

  1. hasOwnProperty 方法用于判断对象“自身”是否有某个属性:
  2. in 用于判断对象“自身”及其“继承对象”是否具有某个属性:
 let  obj = {a:1,b:2};

控制台查看:

   ![image](https://upload-images.jianshu.io/upload_images/14783117-40b208dad3f0ebda?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
obj.hasOwnProperty('__proto__')     // false
obj.hasOwnProperty('valueOf')       // false
'__proto__'  in  obj             // true
'valueOf' in obj         // true

应用:
可以判断一些新属性和方法是否支持:如下

  1. 想判断浏览器是否支持“proto"属性 // ‘proto’ in {}
    2.判断浏览器是否支持“bind”方法 // "bind" in new Function()

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