首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个Javascript代码是异步的?

为什么这个Javascript代码是异步的?
EN

Stack Overflow用户
提问于 2019-05-01 17:00:24
回答 2查看 72关注 0票数 0

我有一个html文件,看起来:

代码语言:javascript
复制
...
<div class="colorbox" data-product="oldUpload" data-color="brown" style="background-color: #31261d" title="Brown"></div>
<div class="colorbox" data-product="oldUpload" data-color="cranberry" style="background-color: #6e0a25" title="Cranberry"></div>
...
<div class="colorbox" data-product="TSHIRT" data-color="brown" style="background-color: #31261d" title="Brown"></div>
<div class="colorbox" data-product="TSHIRT" data-color="cranberry" style="background-color: #6e0a25" title="Cranberry"></div>
...
<script src="profiles.js"></script>

以下是JavaScript文件:

代码语言:javascript
复制
function getSelectedColors() {
  let colorboxes = document.getElementsByClassName('colorbox');
  let selectedColors = [];
  for (let colorbox of colorboxes) {
    if (colorbox.classList.contains('checked')) {
        selectedColors[colorbox.dataset.product] = (selectedColors[colorbox.dataset.product] || '') + colorbox.dataset.color + ',';
    }
  }
  console.log('Colors:' + selectedColors);
  console.log(selectedColors);
  return selectedColors;
}

如果我运行函数getSelectedColors(),控制台中的输出是:

第1行:“颜色:” 第2行:"oldUpload:“棕色,蔓越莓,粉红色,紫色,t恤:”蔓越莓,.“

因此,函数中的代码似乎是异步的,因为"selectedColors“是在for-循环之后的一个空数组,并且该函数还返回一个空数组。但目前,我不明白为什么,因为我认为,我的代码中没有异步的。

那么,为什么这个JS代码是异步的呢?

谢谢克劳斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-01 17:13:52

let selectedColors = [];更改为let selectedColors = {};

在JS规范中,数组只有一个数字索引。其他索引没有枚举,因此在控制台中是“不可见的”。

票数 2
EN

Stack Overflow用户

发布于 2019-05-01 17:19:34

代码语言:javascript
复制
  'Colors:' + selectedColors

通过将数组与字符串连接起来,数组将被隐式转换为字符串。它将加入数组的所有值:

代码语言:javascript
复制
 "" + [1, 2, 3] // "1,2,3"

在您的例子中,数组实际上是空的,它不包含数字键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55939804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档