Javascript 数组+;查拉特问题
以下代码输出aJavascript 数组+;查拉特问题,javascript,arrays,Javascript,Arrays,以下代码输出ak[i]。字符不是函数错误。奇怪的是,如果不是ii,而是将一个数字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]); } } (i=0;n
k[i]。字符不是函数
错误。奇怪的是,如果不是i
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]);
}
}
(i=0;n{
k[i]=参数[i];
如果(k[i].字符(0)==“[”){
k[i]=eval(k[i]);
}
}
这个代码有点模棱两可
参数
表示作为类似数组的对象提供给函数的所有参数charAt
是在String.prototype
if(x.chatAt(0)='['){…}
仅在x
是字符串时才起作用,否则您将得到如上所述的错误
总而言之(在es6中):
所以你可以做两件事:
if(''+arg.charAt(…))…
,或if(arg.toString().charAt())
假设您移交的参数是字符串,那么我建议使用带有检查的映射,并避免使用
eval
函数转换(){
返回Array.prototype.map.call(参数,函数(a){
返回一个[0]='['?JSON.parse(a):a;
});
}
console.log(转换('a',1',[1,2,3]');
.as控制台包装{最大高度:100%!重要;顶部:0;}
什么是k
?你的代码没有包含你对k
的定义。什么是n
?你有没有试过自己用console.log
来调试它?你似乎没有在循环中更新n,所以取决于它最初是什么,这可能会进入无限循环。此外,你对k的定义也是如此这里没有给出code>和n
。n是一个键入错误,即使随i改变,结果也不会改变。k是一个全局数组,在开始时用var k=[]定义,那么您应该在问题中解释这一点,以减少歧义并获得更好的响应
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