当我运行下面的javascript代码时,我将变量原始结束为
"1059823647undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined0"
为什么会发生这种情况,我该如何解决?
original="012345678901234567890";
document.write("<textarea>");
document.write(original);
document.write("</textarea>"+"<br>");
/* scramble */
var scramble='1059823647';
scramble=scramble.split('');
var scrambled=new Array();
original=original.split('');
for(i=0;i<original.length;i++){
if(Math.round(Math.round(Math.floor(i/10)*10)+10)>=original.length){
scrambled[i]=original[i];
}else{
scrambled[i]=original[Math.round(Math.round(Math.floor(i/10)*10)+scramble[i%10])];
}
}
original='';
for(i=0;i<scrambled.length;i++){
original+=scrambled[i];
}
document.write("<textarea>");
document.write(original);
document.write("</textarea>"+"<br>");
答案 0 :(得分:3)
未定义正在打印,因为您的等式:
Math.round(Math.round(Math.floor(i/10)*10)+scramble[i%10])
返回数组范围之外的数字“原始”
例如,当i = 10时,等式返回101.
我不完全确定,但我认为你的意思是:
(Math.floor(i/10)*10) + Number(scramble[i%10])
答案 1 :(得分:0)
你正在使用字符串。但是把它们看作数字。 JavaScript会将数字的字符串表示转换为实际数字,但仅在需要时...而+运算符不需要这样的转换,因为它充当连接运算符字符串。
因此,这个表达式:
Math.round(Math.floor(i/10)*10)+scramble[i%10]
...正在将第一个操作数转换为字符串并附加scramble
数组中的元素。在前十次迭代中你没有注意到这一点,因为当i&lt; 10时,第一个表达式的计算结果为0 ......但在那之后,你突然在每个争夺元素前加上“10”,并试图访问{{1索引&gt; = 100 ...其中没有定义。
在使用之前将字符串转换为数字。
original