《JS 对象基本用法》

197 阅读2分钟

声明对象的两种语法

let obj = { 'name' : 'frank' , 'age' : 18}     //以下是简写写法

let obj = new Object ({ 'name' : 'frank'})     //以下是规范写法

一些特殊的属性名:所有的属性名会自动变成字符串。(如果不想发生下面的事情,在属性名上加'')

let obj = {
  1: true,    // 1 --> '1'
  3.2: true,  // 3.2 --> '3.2'
  1e2: true,  // 1e2 --> '100'
  1e-2: true, // 1e-2 --> '0.01'
  .234: true, // .234 --> '0.234'
  0xFF: true  // 0xFF --> '255'
}

注意:

  1. 对象都是以键值对的形式出现
  2. 键名是字符串,不是标识符,可以包含任意字符串
  3. 引号可以省略,省略之后只能按标识符的规则写(数字除外)
  4. 就算引号省略了,键名也还是字符串
  5. 当键名有空格,中文等特殊符号是,必须加引号,否则会出错
  6. 没有数字键名,也没有数字下标,因为浏览器会自动把数字转换成字符串

如何删除对象的属性

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

    即可删除 obj 的 xxx 属性

  • 区分「属性值为 undefined」和「不含属性名」

    • 不含属性名

    'xxx' in obj === false
    
    • 含有属性名,但是值为 undefined

    'xxx' in obj && obj.xxx === undefined
    

注意 obj.xxx === undefined不能断定 'xxx' 是否为 obj 的属性

如何查看对象的属性

  • 查看自身所有属性

	Object.keys(obj)
  • 查看自身+共有属性

	console.dir(obj)

或者自己依次用 Object.keys 打印出 obj.proto

  • 判断一个属性是自身的还是共有的

	obj.hasOwnProperty('toString')

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

  • 单个赋值

obj['color']="red"
  • 批量赋值 Object.assign

Object.assign (obj,{a:1,b:2})
  • 修改自身里的共有属性(toString) obj

obj.toString
obj.__proto__ = null
  • 修改大家的共有属性(toString) obj/Object.prototype

obj.__proto__.toString
Object.prototype.toString
  • 创建自己的原型(就可以不用去修改原来的原型了)Object.create

var common = {'国籍':'中国'}
var person = Object.create(common)

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

  • 'xxx' in obj 是查看xxx是否是obj这个对象的属性 返回turn(是) 返回false(不是);但是无法区分这个属性是自身的还是原型共有的所以推荐用下面的。
  • obj.hasOunProperty('xxx') 如果返回false就说明不是他自身的。