JavaScript中常用函数方法(对象篇)

目录

Object(obj)

object对象调用的方法

object.hasOwnProperty(prop)

object.isPrototypeOf(obj)

object.propertyIsEnumerable(prop)

Object上定义的静态方法

Object.create(obj,propertiesObject)

参数

示例

Object.getPrototypeOf(obj)

Object.freeze(obj)

Object.defineProperty(obj,'prop',{value:x})

Object.defineProperties(obj,{'prop1':{value:x}},...,{'propn':{value:xn}})

Object.is(value1,value2)

Object.assign(target,obj1,obj2,...,objn)

js中getter和setter 

Object.keys(obj)

Object.values(obj)

Object.entries(obj)

object/Object的其它方法链接


以下介绍的都是一些本人使用过的对象的函数方法,用到新的会一直更新,然后注意大小写,其中object代表对象名,使用时用实际对象名替换的,而Object代表系统定义好的在Object上的静态函数方法,不能在实例化的对象中调用,是不能替换的。

Object(obj)

判断obj的数据类型,并返回调用对应的构造函数转化为对象的结果,比如为number类型的调用Number()函数,为null和undefined时直接返回{}。

object对象调用的方法

这些方法都是定义在Object.prototype上的方法,可以在控制台中直接通过Object.prototype.打印查看

object.hasOwnProperty(prop)

判断object对象中是否有prop属性,返回true或false(不会包含原型链上的属性)

object.isPrototypeOf(obj)

判断object对象是否存在于obj的原型链中,返回true或false

object.propertyIsEnumerable(prop)

判断object上的prop属性是否能被for in循环枚举,返回true或false(如果为object的原型链上的,不管是否能被for in枚举都返回false)。

Object上定义的静态方法

可以在控制台通过Object.后查看弹出的方法。

Object.create(obj,propertiesObject)

返回一个以obj为原型的对象。

参数

obj(必选):新创建对象的原型对象,即通过 Object.create()生成的对象的原型 指向 proto(可以是 null、对象、函数的 prototype 属性)。
(注:创建空原型的对象时需传 null , 否则会抛出 TypeError 异常)。

propertiesObject(可选): 添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应 Object.defineProperties()的第二个参数。

注意通过propertiesObject参数创建非空对象的属性描述符默认是为 false 的,不可写,不可枚举,不可配置。

示例

var obj = Object.create({pro:'123'}, { name: { value: "pyf" } })
obj.name='123'
console.log(obj)

Object.getPrototypeOf(obj)

返回obj.__proto__指向。

Object.freeze(obj)

冻结obj对象,被冻结后该对象不能被修改,不能向这个对象添加新的属性,不能删除已有属性,不能修改属性的可枚举性、可配置性等,该对象的原型也不能修改,返回原obj(注意冻结的是堆中obj对象本身,不是引用的地址,即obj是可以被再次赋予其它对象)

Object.defineProperty(obj,'prop',{value:x})

Vue2.0的底层原理,添加或定义obj对象的prop属性的描述符,其中最后一个参数为描述符,以对象的形式传入,它有value、configurable、enumerable、writable、get、set,其中value、get、set默认为undefined,configurable、enumerable、writable默认为false,默认情况configurable代表属性不能改变和删除,enumerable代表不能枚举,writable代表value值不能被赋值运算符(=)改变。

Object.defineProperties(obj,{'prop1':{value:x}},...,{'propn':{value:xn}})

同上,可同时定义多个属性的描述符。

Object.is(value1,value2)

比较value1和value2值是否相等,和===基本相同,区别在于Object.is(NaN,NaN)会返回true,Object.is(+0,-0)会返回false,===则相反。

注意对象还是比较引用

 

Object.assign(target,obj1,obj2,...,objn)

用于将对象obj中的所有可枚举属性复制到目标对象target中,并返回target对象

如果只传入一个参数,会将该参数转化为对象(null和undefined不能转化为对象,会报错)。

传入多个参数,obj中有相同属性的,obj的属性在后面的会覆盖前面的,如果obj为字符串会转化为字符串对象(会有0~obj.length-1的属性对应字符串中每个字符)。

注意该方法和...解构方法一样是不能复制getter方法,只会将之前的值复制 

const p1 = {
  firstName: 'Lei',
  lastName: 'Wang',
  get fullName(){
    return this.firstName + ' ' + this.lastName
  }
}
const des = Object.getOwnPropertyDescriptors(p1)
const p2 = Object.defineProperties({},des);
p2.firstName = 'y'
console.log(p2.fullName) // y Wang
const p3 = Object.assign({},p1)
p3.firstName='y';
console.log(p3) // Lei Wang
const p4 = {...p1}
p4.firstName='y';
console.log(p4) // Lei Wang

js中getter和setter 

const p1 = {
  firstName: 'Lei',
  lastName: 'Wang',
  get fullName(){
    return this.firstName + ' ' + this.lastName
  },
  set fullName(value) {
    console.log(value)
    // this.fullName = value // 注意不能给fullName赋值,不然会发生死循环。
  }
}
p1.fullName // Lei Wang
p1.fullName = 'yf'  // yf
p1.fullName // Lei Wang

 

Object.keys(obj)

返回一个数组,数组每一位存放obj的可枚举属性。

Object.values(obj)

返回一个数组,数组每一位存放obj的可枚举属性的值。

Object.entries(obj)

返回一个数组,数组每一位存放了一个数组包含2个值的数组,一个值为可枚举属性,另一个为可枚举属性的值。

object/Object的其它方法链接

Object - JavaScript | MDN

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值