2016-12-02 97 views
0

我想运行一个简单的Javascript来显示通过分割字符串创建的数组的元素。代码如下: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> 

上面的代码不会显示在浏览器上任何东西,我不能为我的生命找出错误所在。有人可以建议吗?

+2

您应该检查开发者控制台错误 – Craicerjack

+0

哦,你有'+ =',而不是'= +' – Craicerjack

+0

@Craicerjack VAR声明不会阻止范围的,所以这是不正确的。 –

回答

1

这条线是棘手的,所以任何JavaScript编译器会抱怨:

var x += parts[i] + "<br>"; 

Uncaught SyntaxError: Unexpected token +=

你不能去使用“+ =”赋值运算符来分隔变量。

让我们改写这个任务:

var x = x + parts[i] + "<br>"; 

当它工作,结果是一样的。只有第一次运行时,x未定义,尚未初始化。将undefined连接到任何字符串将在结果中包含字符串undefined

但它重新声明变量?不,因为一个叫做hoisting的概念,任何变量声明,甚至在一个循环中,都会被推到范围的顶部,在这个例子中是全局范围。 (我们不是在谈论letconst

为了解决这个问题,在你读这个变量之前,你需要明确地赋值它,即初始化。

var x = ''; 

以后你就可以使用运营商+=,然后你不需要使用var关键字。

0

你只是在一个基本的概念失败。 变种X必须在循环之前进行声明,如下:

var x = ''; 
for (i = 0; i < parts.length; i++) { 
    x += parts[i] + "<br>"; 
} 
+2

有一个你失败的基本概念,称为起吊 –

+0

除了fgil是正确的这种特殊用途。变量的声明可能会被挂起,但是初始分配不会被挂起。我甚至不知道从哪里开始使用+ =与变量声明。我认为,如果它的工作,它将是undefined01
..... – Rothrock

+1

虽然它的工作,它给出了一个错误的解释。 –

1

fgil给你很好的答案 - 你声明x变量的循环,在第一次 - 这不是初始化(你必须得到+ =错误) ,其次 - 你通过在循环中声明它来重置变量。但我认为这个循环是不需要的。如果您将使用Array的方法连接,则可以使代码更加简单和简短。看看这个:

<!DOCTYPE html> 
<html> 
<body> 

<h1>JavaScript Loops</h1> 

<p id="demo"></p> 

<script> 
    var text = "01/01/2016"; 
    var parts = text.split("/"); 
    var x = parts.join("<br>") + "<br>"; 
    document.getElementById("demo").innerHTML = x; 
</script> 

</body> 
</html> 

Here fiddler with sample

您可以在一行做到这一点:

document.getElementById("demo").innerHTML = "01/01/2016".split("/").join("<br>") + "<br>"; 
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;