我正在尝试这个简单的编码挑战来反转字符串:
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
是什么数据类型?
undefined
开头(您可能已经从结果中看出)。
未赋值的变量属于
类型。一个 如果变量是,方法或语句也返回undefined
被评估没有分配值。函数返回undefined
如果未返回值。undefined
在我将
分配给空白字符串之前,JavaScript 认为它是什么数据类型?newStr
var myVar;
只是声明变量,但不分配初始值。任何未明确指定值的值都是 undefined
。
由于您的循环是自分配
newStr
(newStr = newStr + str.charAt(i);
),因此第一次迭代将尝试将 undefined
连接到自身,这与连接操作数 (+
) 结合将强制 undefined
到 "undefined"
。
如果初始化变量时没有设置值,则设置为
undefined
。
我认为为每个初始化变量设置一个“默认值”是非常建议的。