我是javascript的新手,一直在努力自学基础知识。我确实对C++有一些经验。
我在我用来研究的源代码中遇到了这个例子,for循环对我来说很奇怪:
<html>
<head>
<script type="text/javascript">
<!--
function ReadCookie()
{
var allcookies = document.cookie;
alert("All Cookies : " + allcookies );
// Get all the cookies pairs in an array
cookiearray = allcookies.split(';');
// Now take key value pair out of this array
for(var i=0; i<cookiearray.length; i++){
name = cookiearray[i].split('=')[0];
value = cookiearray[i].split('=')[1];
alert("Key is : " + name + " and Value is : " + value);
}
}
//-->
</script>
</head>
<body>
<form name="myform" action="">
<input type="button" value="Get Cookie" onclick="ReadCookie()"/>
</form>
</body>
</html>
有人能解释一下为什么在这些语句的末尾有[0]和[1]吗?
name=cookiearray[i].split('=')[0];value=cookiearray[i].split('=')[1];
编写此语句的更清晰方法是:
var parts = cookiearray[i].split('='),
name = parts[0],
value = parts[1];
这与for循环本身无关。Split返回一个令牌数组;字符串在给定的分隔符处被拆分。您只需访问此数组中的第一个和第二个令牌。
String.split
使用指定的分隔符(在本例中为'=')创建一个数组。[0]
和[1]
分别选择数组的第一个和第二个元素(Javascript数组元素索引从零开始)。
它们用于访问您创建的数组中的项。
如果您将数组放入变量中并访问该变量,它们的作用就更清楚了,性能也更好了。这样就不必创建两个相同的数组:
var cookie = cookiearray[i].split('=');
var name = cookie[0];
var value = cookie[1];
代码将每个cookie对key=value
拆分为键([0]
)和值([1]
)。
for循环是一个迭代器。你可以把它想象成一个计数器,或者逐步前进。如果你想做某件事x次,那么for循环就是你最好的朋友。当你第一次学习时,问题是弄清楚如何有效地使用它们。
我将给你一个相关的和非相关的(简化的)例子:
不相关:
// Increase the value of x and print the new value to the console 20 times.
var x = 6;
for(var i = 0; i < 20; i++) {
x++;
console.log("Value of x: " + x);
}
如果你仔细观察一下,这真的很合乎逻辑。定义一个迭代变量i
,告诉它何时停止(i < 20
…所以如果i=20就停止),以及如何进行每次迭代(i++
或i+1)。
因此,当i = 0
。。。它将把x
(x++)的值加1,得到x=7。它对每个迭代都做同样的操作,所以当i = 1
,x(7)+1=8,依此类推,直到i=20时,代码就会跳出循环,继续它的快乐之路。当它中断时,我们刚刚在x
中添加了20次1。由于x
过去等于6,现在等于26。
相关:
// Given array of length 10, print each element to the console
for (var i = 0; i < cookiearray.length; i++){
console.log(cookiearray[i]);
}
因此,这里的for
循环是相同的,它只是迭代,直到i
等于数组的长度(在这种情况下是元素的数量)(所以是10次)。当i = 0
时,我们的代码在cookiearray[0]
打印数组的元素。。。当i = 1
打印cookiearray[1]
时。。。依此类推。
在示例中,可能会让您感到困惑的是split函数。Split返回一个数组。所以这行:
name = cookiearray[i].split('=')[0];
实际上意味着分配通过在位置CCD_ 21处分割cookiearray的元素而创建的新数组的第一个元素。
让我们假设cookiearray[0] = "Hello=World"
。当i = 0
时,我们的代码将字符串"Hello=World"拆分为一个新数组,其中0位置的元素为"Hello",然后将其分配给局部变量名。所以name="你好"。