gpt4 book ai didi

javascript - 为什么 Javascript 数组的行为就像薛定谔猫。它是否是一个关联数组?

转载 作者:行者123 更新时间:2023-12-03 00:37:05 27 4
gpt4 key购买 nike

我知道 javascript 不支持 assoc 数组,但我很好奇,我也玩过它们。我想出了这种奇怪的行为。一旦数组作为一个整体被访问,那么我将得到[]。但是如果我用 key 访问它,我可以获得像 assoc 数组中那样的实际值吗?那么是什么导致了薛定谔的这种行为呢?

var test = [];

test["ab"] = {s:1};
test["bc"] = {s:2};

//returns []
console.log(test);

//return object {s:1};
console.log(test["bc"]);

最佳答案

“关联数组”很大程度上是 PHP 的东西。您使用的语法只是对象访问。

这个:

const foo = { prop1: 'value1', prop2: 'value2' };
console.log(foo.prop1]);

等同于:

const foo = { prop1: 'value1', prop2: 'value2' };
console.log(foo['prop1']);

第二种语法的好处是您可以使用其他表达式来访问属性。

const propName = 'prop1';
console.log(foo[propName]);

你说得对,这与 PHP 的关联数组有些相似,但也有明显的区别。其中之一是你可以计算 PHP 的关联数组:

echo count($arr);

但是你不能以同样的方式对待 Javascript 的对象。这是行不通的:

console.log(arr.length);

使用 javascript,您也不能真正循环遍历属性和数组值的混合。这在 PHP 中是可能的,但在 javascript 中不行:

$arr = [ 'prop' => 'value', 5];
foreac($arr as $item) echo $item; // outputs 'value' and 5

在 JavaScript 中,这可能看起来像这样:

const arr = [5];
arr.prop = 'value';

但是您需要 2 个不同的循环来遍历数组值及其属性:

for(const item of arr) console.log(item);
for(const prop of Object.values(arr)) console.log(prop);

最后,一个很大的区别是 Javascript 的数组是密集的,而 PHP 的关联数组是稀疏的。 PHP 数组的行为实际上更像 HashMap 而不是数组。 PHP 的数组会跟踪它们的计数,并且可以同时包含具有整数和字符串索引的成员。

Javascript 实际上拥有的最接近的东西是 new Map()。 PHP 没有像 Javacript 那样的“真正”数组。 (取决于您对数组的定义)

关于javascript - 为什么 Javascript 数组的行为就像薛定谔猫。它是否是一个关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53617115/

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