当前位置: 首页 > 科技观察

你应该知道的15个JavaScript对象基础知识

时间:2023-03-13 13:36:47 科技观察

1.对象字面量是创建对象最简单的方法创建对象最简单的方法是使用对象字面量。我们在花括号{}中定义一组属性,以逗号分隔。下面是一个例子。constgame={name:'Fornite',developer:'EpicGames'};前一个对象有两个属性。第一个属性具有键名和值Fornite。2.对象是属性的动态集合实际上,对象是props的动态集合。创建对象后,我们可以为其添加、编辑或删除属性。下面是在之前的游戏对象中添加和删除年份属性的示例。game.year=2017;删除game.year;3。可以使用点和括号表示法访问属性当键是有效标识符时,可以使用点表示法访问属性。console.log(game.name)当键不是有效标识符时,我们需要使用括号表示法。console.log(game["name"])4.Keysconvertedtostringskeys只是字符串,当使用非字符串值作为keys时它们被转换为字符串。看看当我尝试使用另一个对象作为键时会发生什么。constdeveloperKey={toString(){return'developer'}}console.log(game[developerKey]);当developerKey用作键时,首先使用toString方法将其转换为字符串,然后使用生成的'developer'字符串键检索值。前面的代码给出与game['developer']相同的结果。5.对象继承自其他对象在JavaScript中,对象继承自其他对象。对象有一个名为__proto__的隐藏属性,它指向它们的原型。所有对象都继承自全局Object.prototype。游戏.__proto__===Object.prototype;即使我们不定义此类方法,游戏对象也具有toString或toLocaleString等属性。它们继承自Object.prototype对象。console.log(game.toString);console.log(game.toLocaleString);Object.create()接受一个原型对象并创建一个指向它的新对象。constprototypeObj={};constobj=Object.create(prototypeObj);console.log(obj.__proto__===prototypeObj);6.更改是在当前对象上完成的,而不是它的原型记住,更改是在当前对象上完成的,而不是在它的原型上完成的。原型仅供阅读。在当前对象上执行的添加、编辑或删除属性时。例如,Object.prototype有一个toString属性,考虑从Object.prototype继承的空对象。以下示例中的delete运算符什么都不做,它不会从原型中删除toString属性。constobj={};console.log(obj.toString);删除obj.toStringconsole.log(obj.toString);当我们改变toString属性时,一个新的属性被添加到当前对象中,原型没有改变。此时,当前对象和原型都有一个同名的属性,使用的是当前对象中的那个。常量对象={};obj.toString=function(){};7.我们可以创建一个没有原型的对象Object.create(null)创建一个没有原型的对象。constobj=Object.create(null);console.log(obj.__proto__===undefined);8.类是原型系统之上的糖分class关键字给人一种基于类的语言的错觉,但事实并非如此。JavaScript中的类只是原型系统的糖语法。类游戏{构造函数(名称){this.name=name;}}constgame=newGame('Fornite');console.log(game.__proto__===Game.prototype);9.对象可以存储其他对象属性的值可以是任何类型。属性可以存储对象。考虑下一个示例,其中developer是一个对象而不是字符串。constgame={name:'Fornite',developer:{name:'EpicGames',founder:'TimSweeney'}};10.对象可以存储函数,属性值可以是任何类型,包括函数。以下对象具有用于存储函数的toString属性。constgame={name:'Fornite',toString:function(){返回this.name;}};console.log(game.toString());当函数存储在对象上时,它可以用作方法。请注意,在一个方法中,我们可以使用this关键字来访问关联对象的属性。11.对象可以冻结默认情况下,对象是动态的,这意味着我们可以在创建后添加、编辑或删除它们的属性。然而,我们可以使用Object.freeze()实用程序在创建时冻结此类对象。之后,我们无法在其中添加、编辑或删除属性。查看下一个冻结对象。constgame=Object.freeze({name:'Fornite',});//game.developer='EpicGames';//不能添加属性开发者,对象不可扩展game.name="Valorant";//不能赋值只读取对象12的属性“名称”。原型可以像原型一样被冻结。当一个原型被冻结时,从它继承的对象不能有同名的新属性。考虑以下冻结原型。constprototype=Object.freeze({toString:function(){returnthis.name;}});因为原型是冻结的并且有一个toString属性,我们不能在从它继承的新对象上定义一个同名的属性。constgame=Object.create(prototype);game.name='Fornite';game.toString=function(){return`Game:${this.name}`;};13。Object.keys、Object.values和Object.entries帮助检索拥有的键和值对象有两个属性,拥有的属性是在对象本身上定义的。例如name和developer都是我们游戏对象的属性。继承属性是来自原型的属性。例如,toString是所有对象的继承属性。我们可以使用Object.keys()实用程序获取对象的所有拥有键。constgame={name:'Fornite',developer:'EpiGames'};console.log(Object.keys(游戏));以类似的方式,我们可以使用Object.values()来获取所有值。console.log(Object.values(game));Object.entries()检索包含所有拥有的[key,value]对的数组。console.log(Object.entries(game));//[//["name","Fornite"],//["developer","EpiGames"]//]Object.keys,Object.values和Object.entries都返回一个数组。一旦我们有了它,我们就可以开始使用数组方法了。14.数组是用对象来模拟的是的,数组是用对象来模拟的。考虑以下数组。constgames=[{name:'CandyCrush',developer:'King'},{name:'AngryBirds',developer:'RovioEntertainment'}];这是使用类似于下面的对象模拟的。{'0':{name:"CandyCrush",developer:"King"},'1':{name:"AngryBirds",developer:"RovioEntertainment"}}这就是为什么我们可以使用数字索引和字符串访问相同的元素。请记住,非字符串键被转换为字符串,因此,数组索引被转换为字符串。console.log(游戏[1]===游戏['1']);15.对象是HashMapsJavaScript中的对象类似于其他语言中的映射或哈希表,键的访问时间为O(1)。O(1)意味着无论地图上的数据量如何,访问密钥都需要恒定的时间。O(n)意味着它花费的时间与列表的大小成线性关系。列表越大,访问时间越长。这就是为什么您可能会看到将对象用作映射来搜索唯一键的原因。constgamesMap={1:{name:'Fornite',developer:'EpicGames'},2:{name:'CandyCrush',developer:'King'},3:{name:'AngryBirds',developer:'RovioEntertainment'}}我们现在可以使用gamesMap地图在恒定时间O(1)内通过id获取游戏对象,而无需遍历列表。综上所述,这些就是你需要了解的关于JavaScript对象的一些最重要的知识概念。希望这些内容对您有所帮助。如果你觉得有用,请不要忘记点赞,关注我,分享给你的开发朋友,前来分享这篇文章,说不定能帮到他。最后,感谢您的阅读。