我正在玩这个简单的编码挑战来反转一个字符串:
function FirstReverse(str) {
var newStr;
for (var i = str.length - 1; i >= 0; i--) {
console.log(str.charAt(i));
var newStr = newStr + str.charAt(i);
}
return newStr;
}
console.log(FirstReverse("hey"));
结果变为undefinedyeh
而非yeh
。 但是,当我将var newStr
更改为var newStr = '';
时,它突然起作用了。
在我将其分配给空字符串之前,JavaScript认为newStr
是什么数据类型?
答案 0 :(得分:3)
如果你没有初始化变量,它会以undefined
开头(你可能已经从结果中得知)。
尚未赋值的变量属于
undefined
类型。一个 如果变量是,方法或语句也返回undefined
被评估的没有指定的值。函数返回 如果未返回值,则undefined
。
答案 1 :(得分:2)
在我将其分配给空字符串之前,JavaScript认为
newStr
是什么数据类型?
var myVar;
只是声明变量,但不指定初始值。未明确分配值的任何值的值为undefined
。
由于你的循环是自我赋值newStr
(newStr = newStr + str.charAt(i);
),第一次迭代将尝试将undefined
连接到自身,它与连接操作数(+
)结合使用将undefined
强制转换为"undefined"
。
答案 2 :(得分:1)
如果在初始化变量时未设置值,则将其设置为undefined
。
我认为建议设置一个默认值'对于每个初始化变量。