算是一个记录练习把,或者是回顾一下编辑器自动补出来的方法,或许有一些只是看着熟悉,但是没用过呢? 比如下面这样
一个点引出了很多方法,但是你真的用过这些吗?
一. Object属性
Object.length 【值为 1】
Object.prototype 【老相识了,给对象添加属性】
二.Object方法
1、Object.assign(target, source): 通过复制一个或多个对象来创建一个新的对象
1.会复制后面的源对象到前面的目标对象,不会忽略symbol,也不会忽略null和undefined、
2.该方法我们经常用于前后端处理数据的时候合并对象
3.如果有相同的属性,则后面的源对象覆盖前面的源对象,最后覆盖目标对象
复制代码
Object.assign({}, obj1, obj2, obj3)
复制代码
2、Object.keys()、Object.values()、Object.entries() 这三个方法我们算是常用的了,都返回数组,只不过返回值不一样
keys返回的是可枚举属性组成的数组
values返回的是可枚举属性的值组成的数组
entries返回键值对数组
复制代码
Object.entries({a: 1}, {b: 2}) // [["a", 1], ["b", 2]]
复制代码
我们可以把获取到的数组再进行遍历等操作
复制代码
3、Object.defineProperties(obj, props) 在对象上定义新属性,或者修改现有属性,然后返回对象,obj就是目标对象,props是我们设定的时候各种参数,具体的字段可以自行查阅,这里举一个例子
var obj = {}
Object.defineProperties(obj, {
'a': {
writable: true,
value: 'aaa'
},
'b': {
writable: false,
value: 'bbb'
}
})
obj.a = 'aaaa'
obj.b = 'bbbb'
复制代码
当我们定义好了obj之后,可以看到a和b定义的时候writable的不同,我理解为可写,是可以被赋值、
被改变的,如果是false的时候,就会报错,大家不妨试试
复制代码
4、Object.defineProperty(obj, prop, descriptor) 是不是发现和上面的这个方法很像啊,前一个算是可以同时加好几个属性,当前的这个方法只能加一个,直接看一个例子
Object.defineProperty(obj, 'a', {
enumerable: false, // 置为true的时候,才能出现在枚举属性中
configurable: false, // 该属性才能被改变,同时该属性能在对象上被删除
writable: true,
value: '测试'
})
复制代码
5、Object.freeze() 冻结大法。冻结一个对象,使其不能被新增属性、删除、改写等操作。
var obj = {a : 1}
Object.freeze(obj)
Object.defineProperty(obj, 'a', {
value: '修改一下'
}) // 报错 TypeError: Cannot redefine property: a
obj.a = 'ccc' //如果直接赋值的话
// TypeError: Cannot assign to read only property 'a' of object '#<Object>'
复制代码
6、Object.isFrozen(obj) 顾名思义,判断是不是被冻结,返回的肯定是一个Boolean了
7、Object.seal()、Object.isSealed() 密封和判断是否被密封。密封是在当前对象属性的基础上,进行封闭,不让添加和修改属性,如果已有属性是可写的,那就可以改变,否则不能改变。
var obj = {a : '1'}
Object.seal(obj)
obj.a = '2' // 可写
Object.defineProperty(obj, 'b', {
writable: true,
value: '测试'
}) // 报错 不能添加
delete obj.a // 报错 不能删除
复制代码
8、Object.getOwnPropertyNames() 返回对象的属性名组成的数组,包括不可枚举属性,但是不包括Symbol类型的属性
let getObjs = { a: 1, b: 2, c: 3}
const arr = Object.getOwnPropertyNames(getObjs) ['a', 'b', 'c']
------------------------------------------------------------------------
getObjs[Symbol('foo')] = 'symbol' // 添加一个symbol属性
Object.getOwnPropertyNames(getObjs) // ['a', 'b', 'c'] 还是a\b\c
复制代码
9、Object.getOwnPropertySymbols() 返回对象属性为Symbol的。 还是跟着上面的例子
const arr1 = Object.getOwnPropertySymbols(getObjs) [Symbol(foo)]
是不是只返回了symbol的
复制代码
10、Object.getOwnPropertyDescriptor() 返回一个单个属性的描述符,就是我们上面多次提到的descriptor,比如defineProperty的第三个参数
let des = Object.getOwnPropertyDescriptor(getObjs, "a")
-------------------------------------------------------
// 返回值是对象 默认是下面的形式
{
configurable: true
enumerable: true
value: 1
writable: true
}
复制代码
11、Object.getOwnProperty返回一个所有属性的描述符,可以和上面的一个做比较,一个是返回指定属性,一个是所有属性,注意返回值是一个数组
12、Object.fromEntries() 把键值对列表转化为一个对象,前面的时候我们知道了entries,是把对象转化为键值对的数组
var obj = {
a: 'a1',
b: 'b1',
c: 'c1'
}
Object.entries(obj) // [["a", "a1"], ["b", "b1"], ["c", "c1"]]
Object.fromEntries(Object.entries(obj)) // 把键值对数组转化为对象
复制代码
虽说我们在使用的时候,只会用到常用的一些循环,其余的还是要作为了解,作为知识储备知道的,保不齐哪天就能拿来撩妹了呢?