Object,Array
原型对象、原型链
原型对象: prototype 只有函数才有prototype【函数的原型对象】
原型链: 每一个对象都有原型链 [[prototype]]、__proto__
在javascript中,所有的数组类型都是Object
构造函数
Object()
创建一个新的 Object 对象。该对象将会包裹(wrapper)传入的参数
const o = new Object({name:'lzs',age:19})
console.log(o);
静态方法
静态方法就是绑定在构造函数或者说是原型对象上的
1. Object.assign()
通过复制一个或多个对象来创建一个新的对象。
Object.assign(源数据,复制到的对象)
const o1 = {username:'zs',age:14};
const o2 = {username:'ls',salary:13000};
const o3 = Object.assign(o1,o2); // 列在后面的会覆盖前面的属性
console.log(o3); // {username:'ls',age:14,salary:130000}
2. Object.entries()
返回给定对象自身可枚举属性的 [key, value] 数组。
let o = {name:'zs',age:14}
console.log(Object.entries(o));[['name','zs'],['age',14]]
3. Object.freeze()
防止删除、修改、添加对象的属性
const o1 = Object.freeze({username:'zs',age:'13'});
// 修改
o1.age = 14;
console.log(o1);//username:'zs',age:'13'}
// 删除
delete o1.age
console.log(o1);//username:'zs',age:'13'}
// 添加
o1.hobby=[123,123]
console.log(o1);//username:'zs',age:'13'}
4. Object.seal()
防止删除、添加对象的属性,但可以修改对象的属性。
const o1 = Object.seal({username:'zs',age:'13'});
// 修改
o1.age = 14;
console.log(o1);//username:'zs',age:14}
// 删除
delete o1.age
console.log(o1);//username:'zs',age:14}
// 添加
o1.hobby=[123,123]
console.log(o1);//username:'zs',age:14}
5. Object.defineProperty()
直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,这是框架中为对象添加可检查数据常用的方式 里面有get、set方法
Object.defineProperty(obj, prop, desc)
// writable
Object.defineProperty(o,'name',{
value:'zs'
})
console.log(o); //{name:'zs'}
o.name = 'ls'
console.log(o); //{name:'zs'}
Object.defineProperty(o,'name',{
value:'zs',
writable:true
})
console.log(o); //{name:'zs'}
o.name = 'ls'
console.log(o); //{name:'ls'}
// enumerable 是否可以被迭代,循环遍历
Object.defineProperty(o,'name',{
value:'zs',
})
console.log(Object.keys(o)); //[]
Object.defineProperty(o,'name',{
value:'zs',
enumerable:true
})
console.log(Object.keys(o)); //['names']
// configurable 是否可以被删除
Object.defineProperty(o,'name',{
value:'zs',
})
delete o.name
console.log(o); // {name:'zs'}
Object.defineProperty(o,'name',{
value:'zs',
configurable:true
})
delete o.name
console.log(o); // {}
6. Object.setPrototypeOf()、Object.getPrototypeOf()
设置|获取原型对象的方法
let o = {};
console.dir(o);// {},__proto__
Object.setPrototypeOf(o,{username:'cc'});
console.log(o);// {},{username:'cc'},__proto__
console.log(Object.getPrototypeOf(o));// {username:'cc'},__proto__
7. Object.keys()
let o = {name:'zs',age:14}
console.log(Object.keys(o));['name','age']
实例方法
绑定在原型对象上的,所有实例化后的对象都有自己的对象的原型上的所有方法
1. Object.prototype.hasOwnProperty ()
判断本身是否具备这个属性 不包含原型上的
const o1 = {username:'zs',age:14}
console.log(o1.hasOwnProperty('username'));// true
console.log(o1.hasOwnProperty('hobby'));// false
Array
1.会改变原来数据的方法
push
给数组末尾添加一个元素
pop
弹出数组末尾元素
unshift
给数组头部添加一个元素
shift
弹出数组头部元素
reserve
反转数组
splice
nums.splice(起始位置,长度,【替换的元素】)
sort
数组排序()
2.不会改变原来数据的方法
join
数组转字符串
join(‘xx’) 用xx来链接数组
concat
arr1.concat[arr2]
数组连接,也可以使用es6的语法[…arr1,arr2]
slice(开始索引,结束索引)
返回的是一个数组,不会改变初始数据,
indexof
查找指定的数据,若是找到了返回对应的下标,没找到返回-1
3. 遍历
map
forEach
filter
some
every