我正在尝试运行一个简单的Javascript来显示我通过拆分字符串创建的数组元素。代码如下:
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Loops</h1>
<p id="demo"></p>
<script>
var text = "01/01/2016";
var parts = text.split("/");
var i;
for (i = 0; i < parts.length; i++) {
var x += parts[i] + "<br>";
}
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
上面的代码在浏览器上没有显示任何内容,我不能在生活中找出错误的位置。有人可以建议吗?
答案 0 :(得分:1)
这一行非常棘手,因此任何JavaScript编译器都会抱怨:
var x += parts[i] + "<br>";
未捕获的SyntaxError:意外的标记+ =
您不能使用“+ =”赋值运算符声明变量。
让我们改写这个作业:
var x = x + parts[i] + "<br>";
当它工作时,结果是一样的。仅在第一次运行时,x
未定义,尚未初始化。将undefined
连接到任何字符串将在结果中包含字符串 undefined 。
但它是否重新声明变量?不,因为一个名为hoisting的概念,任何变量声明,即使在循环内,也会被推到范围的顶部,在本例中是全局范围。 (我们不是在讨论let
和const
)
要解决这个问题,在从这个变量中读取之前,你需要明确地指定它,即初始化。
var x = '';
稍后您将能够使用运营商+=
,然后您无需使用var
关键字。
答案 1 :(得分:0)
你只是在基本概念中失败了。必须在循环之前声明 var x ,如下所示:
var x = '';
for (i = 0; i < parts.length; i++) {
x += parts[i] + "<br>";
}
答案 2 :(得分:0)
在for循环外定义x。
var text = "01/01/2016";
var parts = text.split("/");
var x = "";
for (i = 0; i < parts.length; i++) {
x = x + parts[i] + "<br>";
}
document.getElementById("demo").innerHTML = x;