这个 if 语句如何工作和意味着?(Javascript)
how does this if statement works and means? (Javascript)
此函数将字符串的所有字符数计数到字符串中。 我没有完全理解这里的 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])
检查值是否为"真实"。也就是说,它不是false
、null
、undefined
或0
。我们第一次遇到任何字符时,值将被undefined
,因为对象文字是空的,所以"真实"检查将失败,控制权将落入else
块。
因此,当我们第一次看到一个特定的字母时,将值设置为 1(现在是"真实")。
该字母的任何后续遭遇都只是增加值,这相当于说freq[character] = freq[character] + 1;
。增量语法只是一个简写。
if (freq[character])
检查对象freq
上是否具有以 character
值作为名称的属性。 此表达式的结果计算结果为 true
或 false
。
可以更明确地说明这一点,如下文非详尽无遗地说明:
if (freq[character] == null)
或
if (typeof freq[character] === 'undefined')
在评估一个对象是undefined
还是null
时,不显式的危险在于,如果它实际上被设置为一个不同的类型,计算结果为真或假(0
、1
、'0'
、true
、false
)。
- Javascript:var%20C与常规var相比意味着什么
- UMD支持贯穿我们的JavaScript插件意味着
- 双括号在javascript中意味着什么以及如何访问它们
- 这个文档语法在MDN中对JavaScript函数意味着什么
- 这个表达式在JavaScript中意味着什么:if(special_validations中的$(element).at
- 选中Javascript意味着添加到列表中
- 可变键控集合在javascript中意味着什么
- 用JavaScript中的+添加到innerHTML意味着什么
- 截断意味着javascript
- 在 JavaScript 中,当一个变量用逗号分隔的 3 个不同名称声明时,这意味着什么?
- 当使用JavaScript时“未定义”某些内容时,这意味着什么?
- 使用Javascript实用程序意味着什么
- 这个 if 语句如何工作和意味着?(Javascript)
- 哪个意味着生成器 - javascript
- javascript 全局变量不能存储值,如果它意味着从 HTML 元素中提取它们
- 这在Javascript中意味着什么“;typeof(arguments[0])”;
- 当我们回显javascript时,它意味着什么
- 这意味着什么;regex'关于javascript
- 同时在服务器和浏览器上呈现JavaScript意味着什么
- WebView 在 loadUrl() 期间隐藏软键盘,这意味着键盘在调用 javascript 时无法保持打开状态