前言:
JS数据类型
- 四基两空一对象
- String,number,bool,symbol
- null,undefined
- object
- 五个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()主动做了四件事情
- 自动创建空对象
- 自动为空对象关联原型,原型地址指定为X.prototype
- 自动将空对象作为this关键字运行构造函数
- 自动return this
构造函数 X
- X和函数本身负责给对象本身添加属性
- X.prororype对象负责保存对象的公用属性
对于由构造函数构造出的对象来说:你是谁构造的你的原型就是谁的prototype属性对应的对象(prototype不是原型,只是存着原型地址)
对象有哪些类?
- Array,Function,Date,RegExp等
数组对象
-
数组自身属性
属性名:'0','1','2',....(length),没有数字,只有字符串
-
共用属性 push,pop,shift,unshift,join...
函数对象
-
函数自身属性 'name'/'length'
-
函数共用属性 'call','apply','bind'
最后提问
- window是谁构造的?Window
- window.Object是谁构造的?Window.Function
- window.Function是谁构造的?window.Function