此函数将字符串中所有字符的数量计数为一个字符串。我对此处的if语句及其工作方式不完全了解。

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;
};


我以为freq[character]是对象的属性,例如A B如何与if(freq[character])一起使用,以及freq[character]++的增量如何工作?

我已经进行了这样的测试以尝试理解它。

var v = {};
v.h = 3;
v["h"]++;
v["h"] = v["h"] + 1;
v.h++;
v.h = v.h + 2;
console.log(v);
console.log(v["h"]);


我想我可以猜出if语句是否可以在属性存在的情况下工作,但我认为JS有一个对象属性.hasOwnProperty不应使用它代替吗?
至于增量,就我的测试而言,它是有效的,但我只是不知道原因。

有人可以帮我详细说明一下吗?
提前致谢

最佳答案

在javascript中,对象是关联数组。反之亦然。这两个概念之间没有区别。

因此,将此变量定义为一个空对象:

var freq = {};


...实际上是在创建尚未添加任何键的关联数组(如字典或地图)。

继续,让我们输入eek之类的输入字符串。此处的代码将查看第一个字母,并将freq[character]freq['e']相同,后者与freq.e相同。

在此代码中,freq对象中任何字母的初始值为undefined。因此,最初的if()检查字符串中的第一个“ e”实际上是这样的:

if(undefined)

Javascript具有“真实”和“虚假”值的概念; anything in javascript can be evaluated as a boolean,并且(在大多数情况下)实现了明智的结果。查看undefined,Javascript会简单地将其视为虚假值,落入else块,并因此执行以下代码:

freq[character] = 1;


正如已经确定的,这与freq.e = 1;是相同的

现在,当循环继续到下一个字母(也为“ e”)时,javascript将最终对表达式if (1)求值。 Javascript将这个数字和所有其他非零数字视为“真实”,因此这次将执行以下行:

freq[character]++;


同样,这与freq.e++相同,其中freq.e的值为“ 1”,现在可以递增为“ 2”。

最后一个字母“ k”循环一次。这次我们得到freq.k,它仍然是未定义的。未定义是虚假的,因此控制权属于else块,并且freq.k设置为“ 1”。

现在,您可以看到如何在字符串中找到字母时开始增加数组中的字母,即使您似乎从来没有首先定义数组,也从未将任何值都设置为“ undefined”以外的任何值,并且从来没有一个真正的布尔值要检查。

关于javascript - if语句如何工作并意味着什么? (JavaScript),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35444467/

10-13 02:41