当前位置: 首页 > Web前端 > JavaScript

JS-常用对象方法总结

时间:2023-03-27 17:44:07 JavaScript

1、Object.assign()方法功能:用于将一个或多个源对象的所有可枚举属性的值复制到目标对象。它将返回目标对象。代码示例:consttarget={a:1,b:2};const来源={b:4,c:5};constreturnedTarget=Object.assign(target,source);console.log(target);//预期输出:Object{a:1,b:4,c:5}console.log(returnedTarget);//预期输出:Object{a:1,b:4,c:5}2、Object.create()方法作用:创建一个新的对象,使用已有的对象提供新创建对象的__proto__。代码示例:constperson={isHuman:false,printIntroduction:function(){console.log(`我的名字是${this.name}。我是人吗?${this.isHuman}`);}};constme=Object.create(person);me.name="马修";//"name"是在"me"上设置的属性,但不是在"person"上设置的属性me.isHuman=true;//继承的属性可以被覆盖me.printIntroduction();//预期输出:"MynameisMatthew.AmIhuman?true"3.Object.entries()方法功能:返回可枚举的键值对数组给定对象本身的属性及其排列与使用for...in循环迭代对象时返回的顺序相同(不同之处在于for-in循环还会枚举原型链中的属性)。constobject1={foo:'bar',baz:42};console.log(Object.entries(object1)[1]);//预期输出:Array["baz",42]constobject2={0:'a',1:'b',2:'c'};console.log(Object.entries(object2)[2]);//预期输出:Array["2","c"]constresult=Object.entries(object2).sort((a,b)=>a-b);console.log(Object.entries(result)[1]);//预期输出:Array["1",Array["1","b"]]4,Object.freeze()方法函数:您可以冻结对象。无法再修改冻结的对象;当对象被冻结时,对象不能添加新的属性,不能删除已有的属性,也不能修改对象已有属性的可枚举性、可配置性和可写性。属性,并且不能修改现有属性的值。此外,对象的原型在冻结后无法修改。freeze()返回与传递的参数相同的对象。constobject1={property1:42};constobject2=Object.freeze(object1);object2.property1=33;//在严格模式下抛出错误console.log(object2.property1);//预期输出:425,Object.fromEntries()方法功能:将键值对列表转换为对象。Map转Object通过Object.fromEntries,可以将Map转Object:constmap=newMap([['foo','bar'],['baz',42]]);constobj=Object.fromEntries(地图);控制台日志(对象);//{foo:"bar",baz:42}Array转Object通过Object.fromEntries,Array可以转Object:constarr=[['0','a'],['1','b'],['2','c']];constobj=Object.fromEntries(arr);console.log(obj);//{0:"a",1:"b",2:"c"}对象转换为ObjectObject.fromEntries是Object.entries()的反函数借用数组操作方法可以转换对象,如下:constobject1={a:1,b:2,c:3};constobject2=Object.fromEntries(Object.entries(object1).map(([key,val])=>[key,val*2]));console.log(object2);//{a:2,b:4,c:6}6、Object.is()方法功能:判断两个值是否为同值Object.is('foo','富');//trueObject.is(窗口,窗口);//trueObject.is('foo','bar');//falseObject.is([],[]);//假varfoo={a:1};varbar={a:1};Object.is(foo,foo);//trueObject.is(foo,bar);//假Object.is(null,null);//true//特例Object.is(0,-0);//falseObject.is(-0,-0);//trueObject.is(NaN,0/0);//true7,Object.isFrozen()方法功能:判断对象是否被冻结//使用Object.freeze是冻结对象最方便的方式。varfrozen={1:81};Object.isFrozen(frozen)//===falseObject.freeze(frozen);Object.isFrozen(frozen)//===true//冻结对象也是密封对象。Object.isSealed(frozen)//===true//当然,它是一个不可扩展的对象。Object.isExtensible(frozen)//===false在ES5中,如果参数不是对象类型,会抛出TypeError异常。在ES2015中,非对象参数将被视为冻结的普通对象,因此将返回true。Object.isFrozen(1);//TypeError:1isnotanobject(ES5code)Object.isFrozen(1);//true(ES2015code)8.Object.isSealed()方法功能:判断一个对象是否密封.//新创建的对象默认是不密封的。varempty={};Object.isSealed(empty);//===false//如果你让一个空对象不可扩展,它也会变成一个密封对象。Object.preventExtensions(empty);Object.isSealed(empty);//===true//但是如果这个对象不是空对象,它就不会变成密封对象,//因为密封对象本身的所有属性都必须是不可配置的。varhasProp={fee:"fiefoefum"};Object.preventExtensions(hasProp);Object.isSealed(hasProp);//===false//如果此属性变为不可配置,则此属性变为密封对象。Object.defineProperty(hasProp,'fee',{configurable:false});Object.isSealed(hasProp);//===true//生成一个Sealed对象最简单的方法,当然是使用Object.seal.varsealed={};Object.seal(sealed);Object.isSealed(sealed);//===true//密封对象也是不可扩展的。Object.isExtensible(sealed);//===false//密封对象也可以是冻结对象,但不一定。Object.isFrozen(密封);//===true,所有属性都是不可写的vars2=Object.seal({p:3});Object.isFrozen(s2);//===false,属性“p”可以写入vars3=Object.seal({getp(){return0;}});对象.isFrozen(s3);//===true,accessor属性不考虑可写或不可写,只考虑是否可配置9.Object.keys()方法作用:它会返回一个给定的对象由其自身的可枚举属性组成的数组.数组中属性名的顺序与正常循环对象时返回的顺序相同。//简单数组vararr=['a','b','c'];console.log(Object.keys(arr));//console:['0','1','2']//arraylikeobjectvarobj={0:'a',1:'b',2:'c'};console.log(Object.keys(obj));//console:['0','1','2']//arraylikeobjectwithrandomkeyorderingvaranObj={100:'a',2:'b',7:'c'};console.日志(对象。键(anObj));//console:['2','7','100']//getFoo是一个不可枚举的属性varmyObj=Object.create({},{getFoo:{value:function(){returnthis.foo;}}});myObj.foo=1;console.log(Object.keys(myObj));//console:['foo']10.Object.values()方法的作用:返回给定对象本身的所有键一个可枚举属性值数组,顺序与使用for...in循环相同(区别在于for-in循环枚举原型链中的属性)varobj={foo:'bar',baz:42};console.log(Object.values(obj));//['bar',42]//类数组对象varobj={0:'a',1:'b',2:'c'};console.log(Object.values(obj));//['a','b','c']//具有随机键顺序的类数组对象//当我们使用数字键时,值是根据键按数字顺序返回的varan_obj={100:'a',2:'b',7:'c'};console.log(Object.values(an_obj));//['b','c','a']//getFoo是一个不可枚举的属性varmy_obj=Object.create({},{getFoo:{value:function(){returnthis.foo;}}});my_obj.foo='bar';console.log(Object.values(my_obj));//['bar']//非对象参数将被强制转换为对象console.log(Object.values('foo'));//['f','o','o']11.Object.defineProperties()方法作用:直接在一个对象上定义新的属性或修改已有的属性,并返回该对象varobj={};Object.defineProperties(obj,{'property1':{value:true,writable:true},'property2':{value:'Hello',writable:false}//等等等等});12。Object.defineProperty()方法的作用:直接在一个对象上定义一个新的属性,或者修改一个对象已有的属性,返回这个对象constobject1={};Object.defineProperty(object1,'property1',{value:42,writable:false});object1.property1=77;//throwsanerrorinstrictmodeconsole.log(object1.property1);//预期输出:42Object(分为:属性,原型方法,实例方法)属性:1.Object.prototype.writable:默认为false2.Object.prototype.enumerable:默认为false3.Object.prototype.configurable:默认为false4.Object.prototype.constructor:用于创建对象的prototype原型方法:1.Object.prototype.hasOwnProperty():是否包含某个属性,不是来自原型2.Object.prototype.IfPrototypeOf():是否包含原型链中的某个属性3.Object.prototype.propertylsEnumerable():判断指定属性是否可枚举4.Object.prototype.toString():返回对象的字符串表示5.Object.prototype.watch():对对象的某个属性添加监听6.Object.prototype.unwatch():去除对对象某个属性的监听7.Object。原型.valueOf():返回指定对象的原始值实例方法:Object.create(pro,obj):创建对象Object.assign(target,...obj):浅拷贝Object.defineProperty(obj,prop,descriptor):添加或修改一个自己的属性并返回对象Object.getOwnPropertyDescriptor(obj,prop):返回属性描述Object.defineProperties(obj,props):添加或修改多个自己的属性并返回对象Object.freeze(obj):冻结对象,对象不能改变Object.entries(obj):返回对象键值对数据Object.getOwnPropertyNames(obj):返回属性名数组Object.getPrototypeOf(obj):返回对象原型Object.is(value1,value2):判断两个词是否等于,约等于===想了解更多对象方法,应该去MDN学习,那里更全面,更精细