gpt4 book ai didi

javascript - 数组和对象变量的存储和 'weight'

转载 作者:行者123 更新时间:2023-12-02 14:16:43 27 4
gpt4 key购买 nike

所以...

var testArray=new Array("hello");
testArray.length=100;
console.log(testArray.length);

我相信上面的内容意味着我已经创建了一个包含 100 个元素的数组。第一个元素包含单词 hello,其他元素为空,但它们的位置被保留。虽然很小,但我怀疑保留这些“槽”会占用内存。

怎么样

var myObj={ testArray: new Array(), testVar: "elvis", anotherArray: new Array() };
myObj.testArray.length=1000;

此设置在 javascript 中的影响或重要性是什么。引擎是否为 testArray、testVar 和 anotherArray 保留了三个容器,每个容器的大小相似,因为它们属于 myObj?

我倾向于创建一个全局对象(称为 DATA),然后在该对象下创建变量。这些变量包含每天使用几个小时的 Intranet 应用程序内的临时 session 数据。有些变量是数组,有些是字符串。我这样做是因为使用单个命令 DATA=null 我可以清空所有内容,如果我有多个全局变量则不会出现这种情况。

我只是想知道我的想法是否糟糕或可以接受/理解。答案也将帮助我更好地理解 javascript 如何存储数据。

欢迎评论...

最佳答案

I believe the above means I have created an array that has 100 elements. The first element contains the word hello, the others are null, but their position reserved. While small, I suspect reserving these "slots" uses memory.

  • 您创建了一个包含 1 个元素的数组,然后将该数组的长度更改为 100。但是,这并不意味着您有 99 个空元素;数组中只有 1 个元素。换句话说,数组的 length 属性不必告诉您已定义元素的数量

    保留此值的过程确实会占用内存,但对于少量元素。但是,我不建议使用 .length 属性作为赋值;您实际上是在代码中引入了一些意外行为的可能性,以及资源管理不善。

    相反,您应该使用函数允许数组根据需要增长和收缩; .push().pop().splice()。通过这样做,您可以最大限度地减少阵列所需的空间量并提高性能。

What is the impact or weight of this setup within JavaScript. Does the engine reserve three containers, each of similar size for testArray, testVar and anotherArray since they fall under myObj?

  • 为该对象创建了 3 个容器。
    1)DATA 对象获取容器
    2)testArray 获取容器,因为您使用了构造函数方法(不是最佳实践)
    3)anotherArray 容器,因为您使用了构造函数方法(不是最佳实践)

    在您的示例中,DATA 是该容器中存在的所有 name:value 对的容器。 “权重”与您的第一种方法完全相同(除了您分配 1000 个插槽,而不是 100 个)。

  • 我强烈建议您不要使用为数组长度赋值的语句。数组应该只使用需要的空间,不能多也不能少。
  • 您还应该使用文字方法创建数组:var array = [];NOT使用new 关键字,构造函数方法,就像您所做的那样。通过使用 new 关键字,您的代码中可能存在错误。此外,使用 new 关键字声明的 JavaScript 变量始终创建为对象。请参阅下面的示例。

    var data = new Array(2, 10);//创建一个包含两个元素(2 和 10)的数组
    var 数据 = 新数组(2);//创建一个包含 2 个未定义元素的数组

  • 避免污染全局命名空间!!!在您的情况下,使用对象是一个很好的方法,但尽可能保持全局命名空间干净且无困惑非常重要。

更多支持资源:

关于javascript - 数组和对象变量的存储和 'weight',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com