这行第一次console.log(“alphabet --->”+ alphabet);打印未定义

时间:2018-04-15 12:36:11

标签: javascript jquery html function hash

  • 我是js的新手。
  • 我正在分析一个简单的代码。
  • 不确定它是如何运作的。
  • 这行第一次console.log(“alphabet --->”+ alphabet);正在打印未定义的计数[alphabet] ---> undefined
  • 你能告诉我为什么它的打印未定义。
  • 第二次在此行console.log上打印3(计算[字母] + 1);
  • 但它应该从1 + 1打印两个。
  • 你们可以解释一下,以后我可以自己修理它。
  • 在下面提供我的代码更改。
var str = "aaabbccccddd";
var arr = str.split("");
var counts = {};
for (var i = 0; i < arr.length; i++) {
    var alphabet = arr[i];
    console.log("alphabet--->" + alphabet);
        console.log("counts[alphabet]--->" + counts[alphabet]);

    if (counts[alphabet]) 
        {
            counts[alphabet] = counts[alphabet] + 1;
            console.log("inside if--->");
            //console.log("inside if--->" + counts[alphabet] + 1);
            console.log(counts[alphabet] + 1);
        }
    else
    { 
        counts[alphabet] = 1;
        console.log("inside else--->");
        console.log(counts[alphabet]);

        //console.log("inside else--->" + counts[alphabet] + 1);
    }
    //counts[alphabet] = counts[alphabet] ? counts[alphabet] + 1 : 1;
}

console.log('a: ' + counts['a'] + '\n b: ' + counts['b'] + '\n c: ' + counts['c'] + '\n d: ' + counts['d'])

输出

alphabet--->a
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->a
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->a
  counts[alphabet]--->2
  inside if--->
  4
  alphabet--->b
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->b
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->c
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->c
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->c
  counts[alphabet]--->2
  inside if--->
  4
  alphabet--->c
  counts[alphabet]--->3
  inside if--->
  5
  alphabet--->d
  counts[alphabet]--->undefined
  inside else--->
  1
  alphabet--->d
  counts[alphabet]--->1
  inside if--->
  3
  alphabet--->d
  counts[alphabet]--->2
  inside if--->
  4
  a: 3
 b: 2
 c: 4
 d: 3

1 个答案:

答案 0 :(得分:2)

您的代码非常完美!它最终会给你正确的结果。其中一个console.logs()只有一个小错误。

让我们详细了解会发生什么。

设置变量。

var str = "aaabbccccddd";
var arr = str.split("");
var counts = {};

循环arr,等于['a','a','a','b','b','c','c','c','c','d','d','d']

for (var i = 0; i < arr.length; i++) {

第一次进入循环。将alphabet设为arr[i] arr[0]'a'

var alphabet = arr[i];
此时

counts仍然只是一个空对象({})。这意味着counts[alphabet] counts['a']为“undefined”。在JavaScript中,if(undefined)if(false)相同,因此我们跳转到else块。

if (counts[alphabet]) 

在else块中,我们将counts[alphabet] counts['a']设置为1。因此counts变为{'a': 1}

counts[alphabet] = 1;

除了几个console.log()之外,循环内部没有别的事情可做。因此,i0更改为1(因为i++)。 i < arr.length 1 < 12仍为true,因此我们将再次浏览循环体。

for (var i = 0; i < arr.length; i++) {

第二次进入循环。将alphabet设为arr[i] arr[1]'a'

var alphabet = arr[i];

与以前一样,counts[alphabet]counts['a'],但现在counts['a']有一个值。在最后一个循环结束时,counts['a']设置为1。在JavaScript中,0以外的任何数字都是“真实的”。这次我们不会跳转到else块。我们会做if块。

if (counts[alphabet]) 

我们增加counts[alphabet] counts['a']。之前1。现在是2

counts[alphabet] = counts[alphabet] + 1;

现在我们来到了提供意外输出的线。根据以上行,counts[alphabet] counts['a']现为2。当然,2 + 13。此行将输出3

console.log(counts[alphabet] + 1);

如果我理解你要做什么,就不需要在这里添加1。删除+ 1,您应该得到预期的输出。

console.log(counts[alphabet]);