对象Object

88 阅读2分钟

前言:

JS数据类型

  1. 四基两空一对象
  • String,number,bool,symbol
  • null,undefined
  • object
  1. 五个falsy值
  • undefined,null,0,NaN,''

定义

  • 无需的数据集合
  • 键值对的集合

细节

  • 键名是字符串,不是标识符,可以包含任意字符
  • 引号可省略,省略之后只能写标识符(不能以数字开头)
  • 省略之后,键名也还是字符串
  • 变量作为属性名使用[]

对象的隐藏属性

JS中每个对象都有一个隐藏属性,这个隐藏属性存储着其共有属性组成的对象的地址,这个共有属性组成的对象叫做原型,也就是说,隐藏属性组存着原型的地址。(这个原型是构造对象中封装的方法)

增删改查

//删
delete obj['name'] 
'name' in object //这个没有办法区别是原型上的还是对象本身的属性
obj.hasOwnProperty('name') //判断属性是否是本身的
//查,会看原型链
Object.keys(obj)
obj['name']
obj.name //name是字符串
obj[name] //name为变量
//改
['name'] = 'jack' //改自身obj
Object.assign(obj,{age:18}) //批量改自身
obj.__proto__['toString'] = 'xxx' or Object.prototype['toString'] ='xxx' //改共有属性
obj.__prototype = common or let obj = Object.create(common)//改原型
//增同上,已有属性则改,没有则增

构造函数

new X()主动做了四件事情

  1. 自动创建空对象
  2. 自动为空对象关联原型,原型地址指定为X.prototype
  3. 自动将空对象作为this关键字运行构造函数
  4. 自动return this

构造函数 X

  1. X和函数本身负责给对象本身添加属性
  2. X.prororype对象负责保存对象的公用属性

对于由构造函数构造出的对象来说:你是谁构造的你的原型就是谁的prototype属性对应的对象(prototype不是原型,只是存着原型地址)

对象有哪些类?

  • Array,Function,Date,RegExp等

数组对象

  • 数组自身属性

    属性名:'0','1','2',....(length),没有数字,只有字符串

  • 共用属性 push,pop,shift,unshift,join...

函数对象

  • 函数自身属性 'name'/'length'

  • 函数共用属性 'call','apply','bind'

最后提问

  1. window是谁构造的?Window
  2. window.Object是谁构造的?Window.Function
  3. window.Function是谁构造的?window.Function