Object对象方法

一、Object原型方法

1.hasOwnProperty

语法:

对象.hasOwnProperty(非继承属性名) - 判断一个对象中是否有自带的某个属性

返回布尔值,true表示是,false表示否。

只有自己内非继承的属性才能返回true,继承的和不是自己的属性都是false。

2.isPrototypeOf

语法:

对象a.isPrototypeOf(对象b) - 判断对象a是否在对象b的原型链上

返回布尔值

3.in

语法:

属性 in 对象  - 属性是否在对象中

返回布尔值

如果属性在对象中本身没有,原型上有,in 也能返回true

4.propertyIsEnumerable

语法:

对象.propertyIsEnumerable(属性名) - 判断这个属性是否能遍历

返回布尔值 自己的属性可以遍历 继承来的属性无法遍历

5.toString

语法:

对象.toLocaleString()   -  将非字符串类型转为字符串类型

{}定义的对象调用 toString 方法将对象转成 [object Object] 字符串

6.toLocaleString和valueOf

toLocaleStringvalueOf没有实际的效果,是为了让子原型能具备这些方法,来实现不同类型数据的功能。

数字有toLoaleString方法 - 将数字进行 千分位分割

其他类型的数据调用后,会默认调用toString方法转成字符串而已。

时间日期对象有valueOf方法 - 将事件日期对象转成时间戳

其他类型的对象调用,会得到具体的值,相当于console.log(数组/对象)的值

二、Object方法

1.assign

语法:

var 新目标对象 = Object.assign(原目标对象, 被复制的对象)  - 用于将一个对象中可遍历的属性复制到另一个目标对象中

​ 返回值 就是 第一个参数 目标对象

2.create

语法:

var 对象 = Object.create(指定的原型对象, {对象键值对的描述})  -  用于创建一个对象,并指定这个对象的原型

创建对象的时候必须指定这个对象的原型 - object或null

var o = Object.create(null, {
    // 给对象指定属性和值的配置
    // name: '张三'
    /*
        语法:
        属性名: {
            对这个属性的值/特性做描述
        }
    */
    name: {
        // 指定属性的值 - 用vlaue属性
        value: '张三',
        // 指定属性可遍历 - 用enumerable属性
        enumerable: true,
        // 指定属性是否可写 - 用writable属性
        writable: true,
        // 指定属性是否可删除 - 用configurable属性
        configurable: true
    }
})

3.defineProperties

语法:

Object.defineProperties(对象, {对象键值对的描述})  -  用于给对象添加或修改一个属性
Object.defineProperties(obj, {
    name: {
        enumerable: false, // 指定是否可遍历
        writable: false // 指定属性是否可写
    },
    age: {
        configurable: false
    }
})

4.entries

语法:

Object.entries(对象)  -  用于将对象中可遍历的键值对组成一个数组并返回

返回的数组跟map数据格式一样

5.fromEntries

语法:

Object.fromEntries(map格式的数据)

返回键值对组成的对象

6.defineProperty

语法:

Object.defineProperty(对象, 属性名, {对象描述符}) - 监视对象某个属性被设置或被访问

数据双向绑定:当数据改变了,页面的结构也要跟这改变;如果页面中的内容改变了,数据也要跟着改变

监听对象的某个属性的值改变 - 数据劫持
Object.defineProperty(obj, 'name', {
    // 监听属性值变化 - set方法
    set: function(val) { // 当属性的值被设置的时候会触发这个方法的执行
        // console.log(666, val); // 参数val正在设置的值是多少
        input.value = val
    },
    // 监听属性值被访问 - get方法
    get() { // 当属性值被访问的时候会触发执行
        // console.log(666);
        // 访问到的结果是这个方法的返回值
        // return 666
        return input.value
    }
})

7.freeze

语法:

var 对象 = Object.freeze(对象)  -  用于冻结一个对象,让对象不能新增、不能修改、不能删除、不能改原型,不能改属性的特性  

对象冻结后,原型不可以修改,但是可以给原型设置属性和方法

8.getOwnPropertyDescriptors

语法:

Object.getOwnPropertyDescriptors(对象)  -  获取对象中某个属性对应的描述对象

返回对象的描述符

9.getOwnPropertySymbols

语法:

Object.getOwnPropertySymbols(对象)  -  将对象中所有symbol属性,组成一个数组。

10.getPrototypeOf

语法:

 Object.getPrototypeOf(对象)  -  获取对象的原型对象

11.hasOwn

语法:

对象.hasOwnProperty()   ====   Object.hasOwn(对象, 属性) 

判断一个属性是否属于某个对象,而不是被继承来的。 跟hasOwnProperty的功能一样

12.is

语法:

Object.is(数据1, 数据2)  -  用来判断两个数据是否相等

返回布尔值

基本数据类型 - 看表面上看起来是否相等

引用数据类型 - 判断地址是否相同

13.isExtensible

语法:

Object.isExtensible(对象)  -  用于判断一个对象是否可扩展(是否可以给对象添加属性)

冻结对象、密封对象不可以扩展

14.isFrozen

语法:

Object.isFrozen(对象) - 判断对象是否被冻结

15.keys

Object.keys(对象)  -  获取对象中所有键组成的数组

将所有键放在一个数组中返回

16.seal

Object.seal(要被封闭的对象)  -  封闭一个对象,让对象不能添加新属性、不能删除键值对

可以设置

17.values

语法:

Object.values(对象)  -  获取对象中所有值组成的数组

18.preventExtensions

语法:

Object.preventExtensions(对象) - 让一个对象不可扩展(不可添加)

19.setPrototypeOf

语法:

Object.setPrototype(对象, 原型)  -  给对象设置原型

三、ES6的对象操作

1.Symbol

专业用来做对象的属性,让对象可以拥有多个同名属性

语法:

var obj = {
    name: '张三',
    age: 12
}
// 想给对象添加name属性和age属性,可以对象中已经有了name属性和age属性了,此时就将name和age做成symbol数据,然后将symbol数据当做对象的键使用
// 通过name和age做成symbol数据
var nameSymbolKey = Symbol('name')
var ageSymbolKey = Symbol('age')
// 将symbol数据当做对象的键
obj[nameSymbolKey] = '李四'
obj[ageSymbolKey] = 13
console.log(obj);

symbol数据不能跟其他数据进行运算,不能进行隐形类型转换

Symbol可以强制转换成字符串和布尔值

2.Reflect

解决对象访问、修改、删除后我们无法知道是否成功的问题

语法:

Reflect.get(对象, 键) // 返回值或undefined 
Reflect.set(对象, 键, 值) // 给对象添加键值对,返回布尔值
Reflect.deleteProperty(对象, 键) // 删除对象键值对,返回布尔值

3.Proxy

创建一个被劫持/监听的对象,当访问、设置、删除对象键值对的时候会被监视到,和defineProoerty的功能是一样的。

语法:

var pbj = new Proxy(obj, {
    // get方法是当访问pbj的属性的时候会执行的方法
    get(o, k) {
        // console.log(111, o, k);
        // console.log(666);
        // 访问到的内容是get方法的return值
        // return 222
        return o[k]
    },
    // set方法是当给pbj设置属性的时候会执行的方法
    set(o, k, v) {
        console.log(999, o, k, v);
        o[k] = v
    }
})

第一个参数是对象; 第二个参数是键名; 第三个参数是键值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值