数组+ charAt问题

以下代码输出k[i].charAt is not a function错误。 奇怪的是没有错误 - 并且结果是正确的 - 如果不是i我把一个数字k[1].charAt(0) 。 与indexOf同样的事情。

for (i = 0; n < arguments.length; i++) {
    k[i] = arguments[i];
    if (k[i].charAt(0) == "["){
        k[i] = eval(k[i]);
    }
}

这段代码有点不明确。

  • arguments表示作为类似数组的对象提供给函数的所有参数。

  • charAt是一个在String.prototype定义的函数

  • 因此, if (x.chatAt(0) == '[') { … }只有在x是一个字符串时才起作用,否则您将得到如上所述的错误。

    总而言之(在es6中):

    const foo = (...args) => {
      for (let arg of args) {
        if (arg.chatAt(0) == '[') { … }
      }
    } 
    
    foo({}) // Error
    foo('[', {}) // Error, because arg2 is not a string
    foo('[', ']') // No Errors, because each arg is a String
    

    所以你可以做两件事情:

  • 在运行测试之前将每个arg转换为字符串: if (''+ arg.charAt(…)) …if (arg.toString().charAt())

  • 如果参数不是字符串,则抛出一个错误。 测试一个变量是否是一个字符串可以在这里找到


  • 假设你交出了JSON字符串的参数,然后我建议使用带有检查和JSON.parse的映射,并避免使用eval

    function convert() {
        return Array.prototype.map.call(arguments, function (a) {
            return a[0] === '[' ? JSON.parse(a) : a;
        });
    }
    
    console.log(convert('a', 1, '[1,2,3]'));
    .as-console-wrapper { max-height: 100% !important; top: 0; }
    链接地址: http://www.djcxy.com/p/94995.html

    上一篇: array + charAt issue

    下一篇: isNan() function in Javascript not identifying toString()