Javascript 这是第一次使用此行console.log(“字母表”->;“x2B”字母表);是否打印未定义 我是js的新手 我正在分析一个简单的代码 不知道它是怎么工作的 这是第一次使用此行console.log(“字母表-->”+字母表);正在打印未定义的计数[字母表]-->未定义 你能告诉我为什么印刷没有定义吗 第二次在这行控制台上打印3.log(计数[字母表]+1) 但它应该从1+1开始正确打印两个 你们能解释一下吗,这样以后我就能自己修好了 下面提供我的代码更改 var str=“aaabbcccddd”; var arr=str.split(“”); 变量计数={}; 对于(变量i=0;i”+字母表); log(“计数[字母表]-->“+计数[字母表]); 如果(计数[字母表]) { 计数[字母表]=计数[字母表]+1; console.log(“如果-->”,则在内部); //log(“内部if-->”+计数[字母表]+1); 控制台日志(计数[字母表]+1); } 其他的 { 计数[字母表]=1; console.log(“其他内部-->”; console.log(计数[字母表]); //log(“其他内部-->”+计数[字母表]+1); } //计数[字母表]=计数[字母表]?计数[字母表]+1:1; } console.log('a:'+counts['a']+'\n b:'+counts['b']+'\n c:'+counts['c']+'\n d:'+counts['d']))

Javascript 这是第一次使用此行console.log(“字母表”->;“x2B”字母表);是否打印未定义 我是js的新手 我正在分析一个简单的代码 不知道它是怎么工作的 这是第一次使用此行console.log(“字母表-->”+字母表);正在打印未定义的计数[字母表]-->未定义 你能告诉我为什么印刷没有定义吗 第二次在这行控制台上打印3.log(计数[字母表]+1) 但它应该从1+1开始正确打印两个 你们能解释一下吗,这样以后我就能自己修好了 下面提供我的代码更改 var str=“aaabbcccddd”; var arr=str.split(“”); 变量计数={}; 对于(变量i=0;i”+字母表); log(“计数[字母表]-->“+计数[字母表]); 如果(计数[字母表]) { 计数[字母表]=计数[字母表]+1; console.log(“如果-->”,则在内部); //log(“内部if-->”+计数[字母表]+1); 控制台日志(计数[字母表]+1); } 其他的 { 计数[字母表]=1; console.log(“其他内部-->”; console.log(计数[字母表]); //log(“其他内部-->”+计数[字母表]+1); } //计数[字母表]=计数[字母表]?计数[字母表]+1:1; } console.log('a:'+counts['a']+'\n b:'+counts['b']+'\n c:'+counts['c']+'\n d:'+counts['d'])),javascript,jquery,html,function,hash,Javascript,Jquery,Html,Function,Hash,输出 字母表-->a 计数[字母表]-->未定义 其他内部--> 1. 字母表-->a 计数[字母表]-->1 如果--> 3. 字母表-->a 计数[字母表]-->2 如果--> 4. 字母表-->b 计数[字母表]-->未定义 其他内部--> 1. 字母表-->b 计数[字母表]-->1 如果--> 3. 字母表-->c 计数[字母表]-->未定义 其他内部--> 1. 字母表-->c 计数[字母表]-->1 如果--> 3. 字母表-->c 计数[字母表]-->2 如果--> 4. 字母表

输出

字母表-->a
计数[字母表]-->未定义
其他内部-->
1.
字母表-->a
计数[字母表]-->1
如果-->
3.
字母表-->a
计数[字母表]-->2
如果-->
4.
字母表-->b
计数[字母表]-->未定义
其他内部-->
1.
字母表-->b
计数[字母表]-->1
如果-->
3.
字母表-->c
计数[字母表]-->未定义
其他内部-->
1.
字母表-->c
计数[字母表]-->1
如果-->
3.
字母表-->c
计数[字母表]-->2
如果-->
4.
字母表-->c
计数[字母表]-->3
如果-->
5.
字母表-->d
计数[字母表]-->未定义
其他内部-->
1.
字母表-->d
计数[字母表]-->1
如果-->
3.
字母表-->d
计数[字母表]-->2
如果-->
4.
a:3
b:2
c:4
d:3

您的代码非常完美!它会在最后给出正确的结果。只有一个
控制台.logs()中有一个小错误。

让我们仔细看看到底发生了什么

设置变量

var str = "aaabbccccddd";
var arr = str.split("");
var counts = {};
循环
arr
,它等于
['a','a','a','b','b','c','c','c','d','d','d']

for (var i = 0; i < arr.length; i++) {
此时,
计数
仍然只是一个空对象(
{}
)。这意味着
计数[字母表]
这是
计数['a']
是'
未定义的
'。在JavaScript中,
if(未定义)
if(false)
相同,因此我们跳转到else块

if (counts[alphabet]) 
在else块中,我们将
计数[字母表]
,即
计数['a']
,设置为
1
。因此,
计数
变为
{'a':1}

counts[alphabet] = 1;
除了几个
console.log()
s之外,在循环中没有其他事情可做。所以
i
0
变为
1
(因为
i++
i
1<12
仍然是
true
,因此我们将再次遍历循环体

for (var i = 0; i < arr.length; i++) {
与以前一样,
counts[alphabet]
counts['a']
但是现在
counts['a']
有一个值。在最后一个循环结束时,
counts['a']
被设置为
1
。在JavaScript中,除了
0
之外的任何数字都是“truthy”。这次我们不跳到else块。我们来做if块

if (counts[alphabet]) 
我们增加
计数[字母表]
,即
计数['a']
。在它是
1
之前。现在是
2

counts[alphabet] = counts[alphabet] + 1;
现在我们来看看给出意外输出的线路。根据上面的行,
计数[字母表]
这是
计数['a']
现在是
2
。当然,
2
+
1
3
。此行将输出
3

console.log(counts[alphabet] + 1);
如果我明白你想做什么,没有必要在这里加1。删除
+1
,您将获得预期的输出

console.log(counts[alphabet]);

在您的
控制台.log(“计数[字母表]-->”+计数[字母表])
字母表
先前设置为
arr[i]
所以你实际上是说
console.log(“counts[alphabet]-->”+counts[arr[i]])
它在counts中还不存在,所以它是未定义的@ᔕᖺᘎᕊ 嘿,谢谢你的回复…你能给我一些难以理解的评论吗?谢谢你的回复…你能给我一些难以理解的评论吗。让我知道这是否有帮助。hey counts empty object正在变得像这样{'a':1}这就是散列的工作方式……你能用简单的术语解释一下吗……这样我才能更好地理解这里有一篇文章用简单的术语解释JavaScript对象的工作方式。
console.log(counts[alphabet] + 1);
console.log(counts[alphabet]);