JS对象的基本用法

214 阅读3分钟

JS的“七个孩子”

  • number (数字)
  • string (字符串)
  • bool (布尔)
  • symbol (标点符号)
  • object (对象)
  • undefined(空)
  • null(空)

以上为JS的数据类型。(一定要记牢)其中仅仅只有对象object是复杂类型。你的脑子里是不是有很多问号? SO 今天我们就来好好认识一下对象吧!

1.对象的定义

无序的数据集合键值对的集合

如何写呢?

let obj = {'name':'hejiajin','age':25}
let obj = new Object({'name':'hejiajin'})
console.log({'name' :'hejiajin','age' :18})

其中:

  1. 键名是字符串,不是标识符,它可以包含任意字符

  2. 这里的引号可以省略,但省略以后仅仅只能写标识符

  3. 省略引号,但是一定要注意键名一定还是字符串(重要

预览效果

2.属性名和属性值

key 代表属性名,value代表属性值

看个栗子:

let obj = 
{
    1:'h',
    3.2:'e',
    1e2:'true',
    1e-2:'true',
    .234:'true',
    0xFF:'true'
};
Object.keys(obj)
//可以得到obj 的所有key

这里的属性名会自动转换为字符串。

预览

那如何用变量来作属性名呢?

let p1 = 'hejiajin'
let obj = {p1:'hejiajin'}//属性名为p1
let obj = {[p1] :'hejiajin'}//属性名为 'name'

区别

  • 不加[]的属性名会自动变换为字符串
  • 加了[]的属性名会当做变量求值
  • 值若不是字符串,会自动转换成字符串

预览

3.对象的隐藏属性

JS 中每个对象都有隐藏属性,它储存着其共有属性组成的对象的地址,而共有属性组成的对象叫做原型也就是说:隐藏属性存着原型的地址。

代码栗子:

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

4.增删改查

4.1 删除属性

delete obj.xxx // 删除obj的属性
delete obj['xxx']// 删除obj的属性
'xxx'in obj === false //不含属性名
'xxx'in obj && obj.xxx === undefined //含有属性名,但是值为undefiend
obj.xxx === undefiend //不能判断 'xxx'为 obj的属性名

预览

4.2 查看属性(读属性)

代码形式:

Object.keys(obj) //查看所有的属性
console.dir(obj) //查看自身属性和共有属性
obj.hasOwnProperty('toString') //查看 'toString'属性是不是自身的还是共有的属性

补充

1.原型的知识

  • 每个对象都有原型
  • 原型存着对象的共有属性
  • 对象的原型也是对象(所有的原型也有原型这一点不矛盾
  • obj = {} 的原型是所有对象的原型,包含所有对象的共有属性即为对象的根
  • 所有对象的原型也有原型是null

2.查看属性的方式 优先使用中括号语法

obj['key'] //中括号语法
obj.key // 点语法
obj.name = obj['name'] != obj[name] //这里的name是字符串不是变量
let name = 'hejiajin' // 定义一个变量
obj[name] = obj['hejiajin'] != obj['name'] != obj.name 


4.3 修改和增加属性(写属性)

  • 直接赋值
  • 批量赋值

代码:

 let obj = {name : 'hejiajn'} //name是字符串
 obj.name = 'hejiajn'
 obj['name'] = 'hejiajin'
 
 Object.assign(obj, {age: 18, gender: 'man'})//批量赋值

如何修改共有属性呢?

  1. 无法通过自身去修改或者增加共有属性
let obj = {},obj2={}
obj.toString = 'you are beautiful!'
// obj2.toString还是在原型上,共有属性修改失败
  1. 修改共有属性(隐藏属性)的方法

第一种是使用 _ _ proto_ _

let obj = {name = 'hejiajin'}
let obj2 = {name = 'caokun'}
let common = {kind:'human'}
obj.__proto__ = common
obj2.__proto__ = common

第二种方式 使用 Object.creat

let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'

注意: 改属性要趁早!

总结

补充:强烈推荐看一下 let(转载)的语法,让你真正明白 let