JS对象基本用法

七种数据类型

阮一峰数据类型讲解

  • 数字 number
  • 字符串 string
  • 布尔 boolean
  • 符号 symbol
  • 空 undefined
  • 空 null
  • 对象 object

5个Falsy值

  • NaN
  • 0
  • undefined
  • null
  • ‘’ (空字符串)

对象

  • 定义
    无序的数据集合;键值对的集合
  • 写法
    1.let obj = { 'name' : 'Ting' , 'age' : 18 }
    2.let obj = new Object({ 'name' : 'Ting' , 'age' : 18 })
  • 细节:
  1. 键名是字符串,不是标识符,可以包含任意字符
  2. 引号可以省略,省略之后就只能写标识符
  3. 就算引号省略的,键名也还是字符串

变量做属性名

每个key都是对象的属性名;每个value都是对象的属性值。
Object.keys(obj) 可以得到obj的所有key

  • let p1 = 'name'
  • let obj = { p1 : 'Ting' } ,这样写,属性名为’p1’
  • let obj = { [p1] : 'Ting' },这样写,属性名为’name’
    细节
  • 不加[ ]的属性名会自动变成字符串
  • 加了[ ]的属性名则会当做变量求值
  • 值如果不是字符串,则会自动变成字符串

删除对象的属性

  • delete obj.xxxdelete obj['xxx']
    delete obj.xxx 删除后 属性名还在,属性值为undefined
    delete obj['xxx']删除后 属性名和属性值都不在了

查看对象属性

  • 查看自身所有属性 Object.keys(obj)
  • 查看自身+共有属性 console.dir(obj) 或者 依次用Object.keys打印出obj._ _ proto_ _
  • 判断一个属性是自身的还是共有的 obj.hasOwnProperty('toString')
  • 查看属性 obj['key'] obj,key
    重要
    obj.name 等价于 obj.['name']
    obj.name 不等价于 obj.[name]
    name、['name'] 里面的 name 是字符串 ;[name]里面的name是变量

修改和增加属性

直接赋值

  • let obj = {name : 'Ting' ] // name是字符串
  • obj.name = 'Ting' // name是字符串
  • obj.['name'] = 'Ting'
  • obj.['name'] = 'Ting' // 错 因为name值为变量 值不确定
  • obj.['na'+'me'] = 'Ting'
  • let key = 'name'; obj[key] = 'Ting'
  • let key = 'name' ; obj.key = 'Ting // 错 因为 obj.key 等价于 obj.['key']

批量赋值

  • Object.assign(obj,{age : 18 , genger : 'woman'})

重要

  1. 无法通过自身修改或增加共有属性
    let obj = {}, obj2 = {} // 共有属性toString
    obj.toString = 'xxx' 只会在改obj自身属性
    obj2.toString 还是在原型上
  2. 修改隐藏属性 推荐使用Object.create
let obj = Object.create(common)
obj.name = 'Ting'
let obj2 = Object.create(common)
obj2.name = 'Jack'

大概意思是,要改就一开始改,别后来再改

'name' in objobj.hasOwnProperty('name') 的区别

hasOwnProperty('name')该方法用于检查既定的属性在对象实例中是否存在,作为参数的属性名必须是字符串类型。简单来说,name 是否是obj的自己具有的属性,而不是原型上共有的属性
因为对象obj中有name属性,所以返回true;因为没有age属性,所以返回false

let obj = {
  name: 'jinlian'
}

Object.prototype.age = 18;

console.log(obj.hasOwnProperty("name"))    // true

console.log(obj.hasOwnProperty("age"))    // false

in操作符,同样也是检测既定的属性是否存在于对象中,但是不一样的是,只要对象能访问到的属性,in操作符都会返回true,即使在原型上存在该属性。

let obj = {
  name: 'jinlian'
}

Object.prototype.age  = 18;

console.log("name" in obj)    // true

console.log("age" in obj)    // true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值