day21-Object方法
一、Object原型方法
- hasOwnProperty--用于判断某个对象是否具有某个自带属性
语法:对象.hasOwnProperty(属性名)--返回bool,true则有,false就没有
注意: 只有自己内非继承的属性才能返回true,继承的和不是自己的属性都是false。 - isPrototypeOf--判断一个对象是否在另一个对象的原型上
语法:对象a.isPrototypeOf(对象b)--返回布尔值 - propertyIsEnumerable-- 用于判断是否可以从对象中遍历得到某个属性
语法:对象.propertyIsEnumerable(属性名) // 返回布尔值 - toString-- 用于将对象转为字符串
语法:对象.toString() // 返回'[object Object]'
数字的toString-----转成字符串,并切换进制
字符串有toString
布尔值有toString
时间日期有toString
undefined和null没有toString - toLocaleString和 valueOf没有实际的效果,是为了让子原型能具备这些方法,来实现不同类型数据 的功能。
对象的toLocaleString没有特殊意义,跟toString的结果是一样的
数字有toLocaleString----千分位分割
注意:只有数字和时间日期对象调用的时候,能起到作用,其他类型的数据调用后,会默认调用 toString方法转成字符串而已。
对象的valueOf没有特殊意义
时间日期对象的valueOf获取时间戳的
注意: 时间日期对象调用能获取到时间戳,其他类型的对象调用,会得到具体的值,相当于 console.log(数组/对象)的值
二、Object方法
1、assign--用于将一个对象中可遍历的属性复制到另一个目标对象中,返回目标对象
语法:var 新目标对象 = Object.assign(原目标对象, 被复制的对象)
通常用于做浅克隆,将一个对象中的属性复制在另一个空对象中。
2、create--用于创建一个对象,并指定这个对象的原型 语法:var 对象 = Object.create(指定的原型对象, {对象键值对的描述}) // 返回创建好的对象
参数1必填,且参数必须是一个对象或null。参数2是可选项,默认是空对象
通常用于做浅克隆,将一个对象中的属性复制在另一个空对象中。
3、defineProperties--用于给对象添加或修改一个属性 语法:Object.defineProperties(对象, {对象键值对的描述}) // 返回处理后的对象
4、defineProperty--用于监视对象某个属性被访问或被修改的操作 语法:Object.defineProperty(对象, 属性名, {
// 对象属性的描述
writable: false, // 属性是否可修改
enumerable: true, // 属性是否可遍历
configurable: false, // 属性是否可删除
get: undefined, // 访问属性值的时候执行什么程序
set: undefined // 设置属性值的时候执行什么程序
}
5、entries--用于将对象中可遍历的键值对组成一个数组并返回 语法:Object.entries(对象) // 返回数组
6、freeze--用于冻结一个对象,让对象不能新增、不能修改、不能删除、不能改原型,不能改 属性的特性 语法:var 对象 = Object.freeze(对象) // 返回被冻结的对象
7、fromEntries--跟entries的作用相反,将一个map格式的数组(多个键值对组成的数组)转成一个对象
语法:Object.fromEntries(map格式的数据) // 返回键值对组成的对象
可以将map转成对象
8、getOwnPropertyDescriptors--获取对象中某个属性对应的描述对象
语法:Object.Object.getOwnPropertyDescriptors(对象) -- 返回对象的描述符
9、getOwnPropertySymbols--将对象中所有symbol属性,组成一个数组。
语法:Object.getOwnPropertySymbols(对象) - 将对象中所有的symbol属性组成一个数组返回
10、getPrototypeOf--获取对象的原型对象。
语法:Object.getPrototypeOf(对象) - 获取原型
11、hasOwn--判断一个属性是否属于某个对象,而不是被继承来的。跟hasOwnProperty的功 能一样。
语法:对象.hasOwnProperty() ==== Object.hasOwn(对象, 属性)
12、is--用来判断两个数据是否相等,但是跟==和===都不一样,基本类型数据,判断数据看起 来是否相等,引用数据类型比较地址跟===一样 语法:Object.is(数据1, 数据2) // 返回布尔值
13、isExtensible--用于判断一个对象是否可扩展(是否可以给对象添加属性)。冻结对象、密 封对象不可以扩展。
语法:Object.isExtensible(对象) - 判断一个对象是否可扩展的
14、isFrozen--用于判断一个对象是否被冻结。 语法:Object.freeze(对象) -- 冻结一个对象,让对象不可以设置/删除所有属性和原型
15、keys--获取对象中所有键组成的数组。
语法:Object.keys(对象) - 将所有键放在一个数组中返回
16、preventExtensions--用于将一个对象变得不可扩展。
语法:Object.preventExtensions(对象) - 让一个对象不可扩展(不可添加)
17、setPrototypeOf--用于给对象设置原型。
语法:Object.setPrototypeOf(对象, 原型) -- 给对象设置原型
18、seal--封闭一个对象,让对象不能添加新属性、不能删除键值对 语法:Object.seal(要被封闭的对象) // 返回被封闭的对象
19、values--获取对象中所有值组成的数组。
语法:Object.values(对象) - 将所有的值放在一个数组中返回
三、ES6的对象操作
- Symbol--专业用来做对象的属性,让对象可以拥有多个同名属性
Reflect-- Reflect是将对象基本操作换成了函数写法,有了返回值,方便我们进行判断了
a--访问属性的值用get方法,访问到就是具体的值,访问不到就是undefined
Reflect.get(对象, 键) // 返回值或undefined
b--设置属性用set方法
Reflect.set(对象, 键, 值) // 给对象添加键值对,返回布尔值
c--删除用deleteProperty方法
Reflect.deleteProperty(对象, 键) // 删除对象键值对,返回布尔值Proxy-- 是一个构造函数,创建一个跟原对象一模一样的已经被监听的对象
语法:var obj = {name: '张三' } var pbj = new Proxy(obj, { get(object, key) { console.log(object, key); return 111 }, set(object, key, val) { console.log(object, key, val); } }) pbj.name = '张三' // {name: '张三'} 'name' '张三' console.log( pbj.name ); // {name: '张三'} 'name'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。