【问题标题】:typescript - Object-property should be integer but is string?typescript - 对象属性应该是整数但是是字符串?
【发布时间】:2018-08-09 21:23:03
【问题描述】:

我需要遍历一个对象 nodeIDs 并找到特定值的键索引..

 private getNodeIndexByID(nodeIDs, id) {
   for (const [key, value] of Object.entries(nodeIDs)) {
     if (id === value) {
       return key;
     }
   }
 }

返回的键是数字 .. 现在我构建了一个新对象,其中保存了键索引

const index_source = this.getNodeIndexByID(nodeIDs, obj.source);
const index_target = this.getNodeIndexByID(nodeIDs, obj.target);

let my_obj = Object.create({}, { source: { value: index_source }, target: { value: index_target } });
out.push(my_obj);

现在out.sourceout.target 的值是typeOf STRING.. 为什么? ..我的意思是,数组索引是数字的.. 我错过了什么? .. 我需要它们是数字。

【问题讨论】:

    标签: javascript arrays typescript object types


    【解决方案1】:

    JavaScript 对象的键是 always (always!) 字符串,即使它们是使用数字键写入的。

    换句话说,

    x[0] = 1
    

    一模一样

    x["0"] = 1
    

    如果您正在计算对象的键/值对,您会看到字符串键,因为 JavaScript 对象的键始终是字符串。

    【讨论】:

    • 这对我来说是新的,我原以为 x[0] 只适用于数组对象。
    • Nit: Array.prototype.entries() 迭代器将导致类似 for (const [key, value] of ['foo', 'bar'].entries()) 的内容具有 typeof key === 'number'。自 [] instanceof Object 以来,从技术上讲,这不是带有数字键的 JavaScript 对象吗?
    • 键仍然是字符串。 entries 代表您将它们转换为数字不会改变这一点。
    • 这很奇怪..因为我需要将我的对象传递给第 3 方脚本,其中包含此代码 if (typeof edge.source == "number") {..
    猜你喜欢
    • 2016-10-26
    • 2017-02-14
    • 2013-05-14
    • 2018-04-29
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多