传入其中的部分字符串具有十进制

时间:2018-05-03 23:17:45

标签: javascript

以下内容完美无缺,直到将密钥发送给它并带有小数。然后它会触发一个"意外的数字"。我可以想一些与修改从数据库发送的对象中的键有关的工作,但是想弄清楚为什么这会先触发错误。

以下内容发生了什么:

  1. 用户(例如,5日,15日,35日,62.5日等)从FE发送多个百分位数作为对象(例如incP1: 5th, incP2: 15th, etc.),然后将其映射。 / p>

  2. 如果密钥以inc开头,它会执行一定的逻辑。

  3. 它构造一个与fieldStr对象中的键对应的字符串(cr),该字符串基本上是用户请求的百分位数的实际值。

  4. 在这种情况下,它会构建类似cr.TestInc15

  5. 的内容
  6. let fieldObj = eval(fieldStr)然后返回构建的密钥的cr.的值。

  7. 希望这是有道理的,但这就是我使用eval()的原因,因为我无法从键中获取值作为字符串。它工作正常,直到它达到像第62.5百分位那样的键,其中键将被构造为cr.TestInc62.5,它在cr.中肯定具有值,因为我可以console.log它。

    renderData(percentiles, cr, varName) {
        return (
            _.map(
                _.pickBy(percentiles, function (value, key) {
                    return _.startsWith(key, 'inc')
                }), p => {
                    let fieldStr = 'cr.' + varName + 'Inc' +
                        (p == 'n' ? 'N' :
                            (p == 50 ? 'Median' : p
                            ));
    
                    // a bunch of junk after this, but error stops it here
                    let fieldObj = eval(
                        fieldStr
                    );
                }
            )
        )
    }
    

1 个答案:

答案 0 :(得分:1)

当然,您可以使用字符串获取值,即使在将点作为属性名称的一部分的情况下,也可以在不使用eval的情况下访问对象属性。

它被称为括号表示法

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors

var cr = { "TestInc62.5": "Val123" }

console.log(cr["TestInc62.5"]);