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]);