JS 对象基本用法

276 阅读3分钟

七种数据类型:分别是简单数据类型: 数字(number) 、字符串(string)、 布尔(Boolean) 、符号(symbol )空(null)、 未定义(undefined)、复杂数据类型:object

五个falsy值 :null undefined 0 NaN ""

1、声明对象的两种语法

方法一:

let obj = {
    'name' : 'meng',
    'age' : 18
}

方法二:

let obj = new Object({
    name : meng,
    age : 18
})
  • 注意:

    • 键名是字符串,不是标识符,可以包含任意字符
    • 引号可以省略,省略之后就只能写标识符,特殊字符不能省略,如中文、表情。
    • 就算引号省略,键名还是字符串
  • 变量做属性名 *之前都是用常量做属性名

    let p1='name'
    let obj={p1:'frank'}这样写,属性名为'p1'
    let obj={[p1]:'frank'这样写,属性名为 'name'
    
    
  • 对比

  • 不加[]的属性名会自动变成字符串

  • 加了[]则会当做变量求值

  • 值如果不是字符串,则会自动变成字符串

  • 对象的隐藏属性

    • js中每一个对象都有一个隐藏属性
    • 这个隐藏属性储存着其共有属性组成的对象的地址
    • 这个共有属性组成的对象叫原型
    • 也就是说,隐藏属性存储着原型的地址

代码演示

var obj={}
obj.toString() //不报错
//因为obj的隐藏属性对象的对象上有toString()

2、删除对象的属性

  • delete obj.xxx或delete obj['xxx']

如下图所示:判断对象的属性是否存在,用 'xxx'in obj返回值为ture,删除成功

如下图所示obj.name=undefined删除的是属性值,obj2delete删除的是属性名

3、查看对象的属性

3.1 查看自身所有属性

Object.keys(obj2)

如下图所示 Object.keys()是查看所有属性 Object.valus()查看所有值 Object.entries()查看所有属性和值

3.2查看自身+共有属性的方法

如下图所示:查看自身属性+共有属性

  • console.dir()
  • 或者自己依次用Object.keys打印出obj.proto

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

'name'in obj判断不出属性是否继承自原型 obj.hasOwnProperty('name') 可以查看是否属于共有属性

3.4查看属性

  • 两种方法查看属性
    • 中括号语法:obj['key']
    • 点语法:obj.key
    • 坑新人语法:obj[key] //变量key值一般不为'key'

obj.name等价于obj['name']

obj.name不等价与obj[name]

简单来说,这里的name是字符串,而不是变量

let name='frank' obj[name]等价于obj['frank']

而不是 obj['name']obj.name

4、修改或增加对象的属性

①直接赋值

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']

②批量赋值(是ES6新出的API)

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

4.1修改或增加共有属性

  • 无法通过自身修改或增加共有属性
  * `let obj={},obj2={}`//共有属性
  * `obj.toString='xxx'`只会在改obj自身属性
  * `obj2.toString`还是在原型上
* 我偏要修改或增加原型上的属性
  *` obj._proto_.toString='xxx'` //不推荐用_proto_
  * `Obeject.prototype.toString='xxx'`
  • 一般来说,不要修改原型,会引起很多问题

4.2 修改隐藏属性

  • 推荐使用Object.create
let obj=Object.create(common)
obj.name='frank'
let obj2=Object.create(common)
obj2.name='jack'
<!--规范大概的意思是,要改就一开始就改,别后来再改-->