Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:数组和For循环基础_Javascript_Arrays_Loops - Fatal编程技术网

Javascript:数组和For循环基础

Javascript:数组和For循环基础,javascript,arrays,loops,Javascript,Arrays,Loops,我是javascript新手,一直在努力自学基础知识。我有一些C++的经验。 我在用于学习的源代码中遇到了这个示例,for循环对我来说很奇怪: <html> <head> <script type="text/javascript"> <!-- function ReadCookie() { var allcookies = document.cookie; alert("All Cookies : " + allcookies );

我是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]。拆分('=')[0];
value=cookiearray[i]。拆分('=')[1]

代码将每个cookie对
key=value
拆分为key(
[0]
)和value(
[1]
)。

这与for循环本身无关。Split返回一个令牌数组;字符串在给定的分隔符处拆分。您只需访问此数组中的第一个和第二个令牌。

编写此语句更清晰的方法是:

 var parts = cookiearray[i].split('='),
     name = parts[0],
     value = parts[1];

使用指定的分隔符(在本例中为“=”)创建数组。
[0]
[1]
分别选择数组的第一个和第二个元素(Javascript数组元素索引从零开始)。

这些元素用于访问您创建的数组中的项

如果将数组放入一个变量并访问该变量,它们的作用会更清楚,性能也会更好。这样,您就不必创建两个相同的阵列:

var cookie = cookiearray[i].split('=');
var name = cookie[0];
var value = cookie[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);
}
// 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];
…实际上意味着分配通过在位置
i
拆分cookiearray的元素而创建的新数组的第一个元素


让我们假设
cookiearray[0]=“Hello=World”
。当
i=0
时,我们的代码将字符串“Hello=World”拆分为一个新数组,其中0位置的元素为“Hello”,然后将其分配给局部变量名。所以name=“Hello”。

是循环还是拆分让你困惑?如果是拆分,请看返回的是什么
split()
确实令人困惑,因为它执行了两次(没有任何结果)。第二次拆分(在for循环中)是将cookie键/值配对拆分为可用数组。我假设数据的形式是
Key=Value;键=值;Key=Value
就像cookies一样…但是.split()函数用于字符串,所以不要陷入Key/Value的讨论中…这不是.split()的固有特性或(最)常见用法。Key[0]和[1]什么都没有?您最好将
split
(两者中的哪一个?)重命名为更具描述性的版本。