这个if语句是如何工作的?(Javascript)
此函数用于计算字符串中所有字符的个数。我不完全理解这里的if语句及其工作原理这个if语句是如何工作的?(Javascript),javascript,object,properties,Javascript,Object,Properties,此函数用于计算字符串中所有字符的个数。我不完全理解这里的if语句及其工作原理 function getFrequency(string) { var freq = {}; for (var i=0; i<string.length;i++) { var character = string[i]; if (freq[character]) { freq[character]++; } else {
function getFrequency(string) {
var freq = {};
for (var i=0; i<string.length;i++) {
var character = string[i];
if (freq[character]) {
freq[character]++;
} else {
freq[character] = 1;
}
}
return freq;
};
我想我可以猜测if语句是否有效,如果属性存在,但是我认为JS有一个对象属性调用。hasOwnProperty
是否应该使用它?
至于增量,根据我的测试,它是有效的,但我不明白原因
有人能帮我详细说明一下吗?
提前感谢javascript中的对象是关联数组。反之亦然。这两个概念没有区别
因此,将此变量定义为空对象:
var freq = {};
。。。实际上正在创建一个关联数组(如字典或地图),但尚未添加任何键
接下来,让我们使用一个输入字符串,如eek
。这里的代码将查看第一个字母,并将freq[character]
与freq['e']
相同,这与freq.e
相同
在此代码中,freq
对象中任何字母的初始值都是未定义的
。因此,初始的if()
检查字符串中的第一个“e”实际上如下所示:
if(未定义)
Javascript具有“truthy”和“falsy”值的概念,而且(在大多数情况下)取得了合理的结果。查看undefined
,Javascript将简单地将其视为一个虚假的值,落到else
块,因此执行此代码:
freq[character] = 1;
如前所述,这与freq.e=1相同代码>
现在,当循环继续到下一个字母(也是一个“e”)时,javascript将最终计算表达式if(1)
。Javascript将此数字和所有其他非零数字视为“truthy”,因此这次将执行以下行:
freq[character]++;
同样,这与freq.e++
相同,其中freq.e
的值为“1”,现在可以增加到“2”
最后一个字母“k”再循环一次。这次我们得到了freq.k
,它仍然没有定义。Undefined为falsy,因此控制权落入else
块,并且freq.k
设置为“1”
现在,您可以看到,当您在字符串中找到字母时,我们如何开始递增数组中的字母,即使看起来您一开始从未定义过数组,从未将任何值设置为“未定义”以外的任何值,也从未检查过实布尔值。if(freq[character])
检查对象freq
是否具有值为character
作为名称的属性。此表达式的结果计算为true
或false
可以更明确地说明,如下所示:
if (freq[character] == null)
或
在评估对象是否未定义或null
时不明确的危险是,如果对象实际设置为另一种类型,评估结果为真或假(0
,1
,'0'
,true
,false
) if(freq[character])
检查值是否为“truthy”。也就是说,它不是false
,null
,undefined
或0
。当我们第一次遇到任何字符时,值将是未定义的,因为对象文本是空的,所以“truthy”检查将失败,控制权将落在else
块上
因此,当我们第一次看到一个特定的字母时,将值设置为1(现在是“truthy”)
任何后续遇到该字母的情况都会增加该值,这相当于说freq[character]=freq[character]+1代码>。增量语法只是一种简写。看起来像是计算字符的出现次数string='abbccdd'
=freq=[1,2,3,2]
这计算字符串中每个字符(字母、数字等)的出现次数。if语句本质上是说“如果设置了freq对象的[character]值并且有一个值,那么向它添加一个值(这就是++
所做的),否则将其设置为1”欢迎使用JavaScript!对于增量,您究竟不了解什么foo++
是foo=Number(foo)+1
@FelixKling的简写,也许我只是想得不清楚freq.character
相当于freq[“character”]
。
之后的属性名称是文本,而不是变量。因此,如果属性是一个数值,那么增量将像这样工作,因为JS就是这样的:希望你不介意编辑。如果您觉得他们做得太过分了,请随意回滚。哇,谢谢您提供的详细信息,但这只是引起了我对的好奇心。hasOwnProperty
如果我们可以像检查if(object[property])
一样检查它,而不是使用if(object.hasOwnProperty['prop'])
.hasOwnProperty()
只返回一个布尔值。您可以使用它,但它更为详细。这与主题无关,但不知道是否可以不使用对象而像列表一样返回?几乎是一样的东西,但不是一个对象。你需要一个字典或地图,将特定的字母与该字母的计数关联起来。Javascript通过关联数组实现这一点,而关联数组又与对象完全相同。在javascript中,关联数组和对象只是以不同的方式在代码中表示内存中相同的底层结构
if (freq[character] == null)
if (typeof freq[character] === 'undefined')