gpt4 book ai didi

javascript - 理解此语法 if(obj[x])

转载 作者:行者123 更新时间:2023-12-01 02:01:20 24 4
gpt4 key购买 nike

所以我正在关注 Udemy 上的一些教程,总的来说,它们非常出色,只是现在有一位新的讲师来指导我现在正在学习的部分,他对函数的内部工作原理没有那么详细的描述。

当前示例是一个函数,用于计算所述字符串中元音的迭代次数。

function vowelCount(str){
var splitArr = str.toLowerCase().split("");
var obj = {};
var vowels = "aeiou";

splitArr.forEach(function(letter){

if(vowels.indexOf(letter) !== -1){
if(obj[letter]){
obj[letter]++;
} else{
obj[letter] = 1;
}
}
});

}

vowelCount("abcdefghij")

我个人感到困惑的部分是 if(obj[letter])

在我看来,obj 变量是空的,在这种情况下 [] 中的任何内容都是对索引的引用,我不明白 if 语句正在检查什么,我也不太理解语法obj[字母] 后面的内容。

对此的任何启发都将受到高度赞赏。

最佳答案

这样做是这样的:

  1. 正在评估 obj[letter] (有关此部分的更多信息,请参阅 this question's answers ):
    • 正在评估 letter获取其当前值(例如 "a" )
    • 正在评估 obj获取其当前值(对象)
    • 获取名为 "a" 的属性的值(例如)在物体上;如果该属性不存在,则结果将是值 undefined
  2. 分支到 if如果第 1 步的值是真实

真值是任何非假值。虚假值为 undefined , null , 0 , "" , NaN ,当然还有false .

基本上,该代码正在做的是查看是否 obj已经有该字母的属性,如果有,则增加其值;如果不是,则将其值设置为 1。

不过,不要过度概括该模式。它在这里起作用是因为属性的值永远不会是 0""或类似的值(存储的值从 1 开始并且只会增加)。但在其他情况下,如果您需要查看对象上是否存在某个属性,但其值可能是这些虚假值之一,请使用 obj.hasOwnProperty(letter) (检查该属性是否存在于对象本身,而不是其原型(prototype)上),letter in obj如果你想检查对象及其原型(prototype)链,或者你想对 hasOwnProperty 保持偏执被重新定义使用 Object.prototype.hasOwnProperty.call(obj, letter) 。 :-)

但是,当您知道该属性要么不存在,要么具有真值时,这种“虚假”检查非常有用。

关于javascript - 理解此语法 if(obj[x]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50545018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com