不确定我在这里做错了什么;变量newStr
应该只返回“Hello World”,但我得到的是:
"undefinedHello World"
undefined
JS
function translate2(x){
var newStr;
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
答案 0 :(得分:15)
在JavaScript中,如果未明确初始化变量,则默认情况下会undefined
。这不是字符串,而是语言的原始类型。你可以通过打印来检查它
var newStr;
console.log(newStr);
// undefined
console.log(newStr + "thefourtheye");
// undefinedthefourtheye
所以,只需用空字符串初始化变量,就像这样
var newStr = '';
另请注意,在此行中
for(i=0; i < x.length; i++) {
之前从未宣布过{p> i
。因此,将创建一个新的全局变量i
。你可能不希望这样。因此,只需使用var
关键字来声明作用于当前函数的变量,如此
for (var i = 0; i < x.length; i++) {
除此之外,translate2
是一个函数,当它被调用时,人们会期望它返回一些东西。但你没有明确地归还任何东西。因此,默认情况下,JavaScript会返回undefined
。这就是你在问题中获得第二个undefined
的原因。要解决此问题,请使用return
这样的语句
function translate2(x) {
var newStr = "";
for (var i = 0; i < x.length; i++) {
newStr += x.charAt(i);
}
return newStr;
}
答案 1 :(得分:4)
首先应该初始化变量newStr。
var newStr = '';
否则,newStr将在javascript中未定义且未定义+“asa”=“undefinedasa”。如果您不知道未定义的内容,请选中this。
答案 2 :(得分:1)
newStr未定义。 添加
var newStr = '';
所以你有
function translate2(x){
var newStr='';
x = "Hello World";
for(i=0; i<x.length; i++) {
newStr+=x.charAt(i);
}
console.log(newStr);
}
答案 3 :(得分:-1)
以上答案不正确。 console.log()
将在循环完成之前运行,这就是为什么获得undefiend
的原因。
您可以找到答案here。
您必须像这样一段代码来考虑同步:
function delay() {
return new Promise(resolve => setTimeout(resolve, 300));
}
async function delayedLog(item) {
// notice that we can await a function
// that returns a promise
await delay();
console.log(item);
}
async function processArray(array) {
for (const item of array) {
await delayedLog(item);
}
console.log('Done!');
}
processArray([1, 2, 3]);
这将为您提供1,2,3,done
,这意味着console.log在循环结束时发生!