【发布时间】:2023-03-26 22:44:01
【问题描述】:
TL;DR;
我期待这个代码
console.log Object.defineProperty(results,match, {value:[]})
输出类似:
[foo: Array[0]]
这适用于控制台,但不适用于 Jasmine 正在测试的我的代码。
详情
我正在尝试创建一个 JavaScript 哈希。我似乎无法在我的代码中动态创建属性,尽管我能够在 JSFiddle 中做到这一点。我先写测试,代码在 Jasmine 下似乎失败了。不知道是不是茉莉的错。
这是我的fiddle。我是第一次使用 Object.defineProperty 定义属性,但我也尝试过:
if typeof results[match] = 'undefined' then results[match] = []
这也没有用。在我的 Jasmine 代码中,它不会创建属性。
【问题讨论】:
-
不是执行此操作的标准方法
results[match] = results[match] || [];这比 if 更快 -
我在阵列上调用 .push。如果数组不存在,也就是说,如果动态属性没有被定义为结果数组上的数组,JavaScript 会抱怨 push 不是“结果”的方法。
-
@Hogan:
results[match] ?= [ ]可能是更惯用的 CoffeeScript。我怀疑任何速度差异都会非常小,不是吗? -
@muistooshort - 同意
标签: javascript arrays coffeescript jasmine