这个 if 语句如何工作和意味着?(Javascript)

how does this if statement works and means? (Javascript)

本文关键字:意味着 Javascript 工作 if 语句 何工作 这个      更新时间:2023-09-26

此函数将字符串的所有字符数计数到字符串中。 我没有完全理解这里的 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 。因此,对字符串中第一个"e"的初始if()检查实际上如下所示:

if(undefined)

Javascript具有"真实"和"虚假"值的概念;JavaScript中的任何内容都可以被评估为布尔值,并且(在大多数情况下)可以获得合理的结果。看看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,这仍然没有定义。Undefined是假的,因此控制权落到else块,freq.k设置为"1"。

现在您可以看到我们如何开始在数组中增加字母,因为您在字符串中找到字母,即使看起来您从未定义过数组,从未将任何值设置为"未定义"以外的任何值,并且从未有真正的布尔值要检查。

>if (freq[character])检查值是否为"真实"。也就是说,它不是falsenullundefined0。我们第一次遇到任何字符时,值将被undefined ,因为对象文字是空的,所以"真实"检查将失败,控制权将落入else块。

因此,当我们第一次看到一个特定的字母时,将值设置为 1(现在是"真实")。

该字母的任何后续遭遇都只是增加值,这相当于说freq[character] = freq[character] + 1;。增量语法只是一个简写。

if (freq[character])检查对象freq上是否具有以 character 值作为名称的属性。 此表达式的结果计算结果为 truefalse

可以更明确地说明这一点,如下文非详尽无遗地说明:

if (freq[character] == null)

if (typeof freq[character] === 'undefined')

评估一个对象是undefined还是null时,不显式的危险在于,如果它实际上被设置为一个不同的类型,计算结果为真或假(01'0'truefalse)。