不使用或在javascript中统计字母。有什么原因吗?

不使用或在javascript中统计字母。有什么原因吗?,javascript,string,conditional-statements,Javascript,String,Conditional Statements,学习javascript我写了以下内容: function compterNbVoyelles() { var nombreDeVoyelles = 0; var mot = "Anaconda"; for (var i = 0; i < mot.length; i++) { var lettre = mot[i].toLowerCase(); if (lettre === ('a' || 'e' || 'i' || 'o' || '

学习javascript我写了以下内容:

function compterNbVoyelles() {
    var nombreDeVoyelles = 0;
    var mot = "Anaconda";
    for (var i = 0; i < mot.length; i++) {
        var lettre = mot[i].toLowerCase();
        if (lettre === ('a' || 'e' || 'i' || 'o' || 'u' || 'y')) {
            nombreDeVoyelles++;
        }
    }
    return nombreDeVoyelles;
}

console.log(mot + " has " + compterNbVoyelles(mot) + " vowels and " + (mot.length - compterNbVoyelles()) + " consonants");
函数compterNbVoyelles(){
var nombredowyelles=0;
var mot=“蟒蛇”;
对于(变量i=0;i
它打印:

水蟒有3个元音和5个辅音。。。(实际上有4个元音)

现在:

function compterNbVoyelles(mot) {
    var nombreDeVoyelles = 0;
    var mot = "Anaconda";

    for (var i = 0; i < mot.length; i++) {
        var lettre = mot[i].toLowerCase();
        if ((lettre === 'a') || (lettre === 'e') || (lettre === 'i') ||
            (lettre === 'o') || (lettre === 'u') || (lettre === 'y')) {
            nombreDeVoyelles++;
        }
    }
    return nombreDeVoyelles;
}
函数compterNbVoyelles(mot){
var nombredowyelles=0;
var mot=“蟒蛇”;
对于(变量i=0;i
它打印:

水蟒有4个元音和4个辅音


太好了!我不知道我犯了什么错,我假设计算机没有犯任何错误;)

当你做
lettre==('a'| | | | | | | | | i'| | | | | | o'| | | | | | u'| | | | y')
时,它首先计算括号中的内容,然后再与<

对括号中的内容进行求值将导致只计算为a的
'a'
,因此最后该行实际上变成了
lettre=='a'

console.log(('a'|'e'|'i'|'o'|'u'|'y'))

.as-console-wrapper{max-height:100%!important;top:0;}
当你做
lettre==('a'|| e'| i'| o'| |'u'| | y')
它首先计算括号中的内容,然后再与
lettre进行比较

对括号中的内容进行求值将导致只计算为a的
'a'
,因此最后该行实际上变成了
lettre=='a'

console.log(('a'|'e'|'i'|'o'|'u'|'y'))
.as-console-wrapper{max-height:100%!important;top:0;}
lettre==('a'.'e'.'i'.'o'.'u'.'y')
实际上相当于
lettre==('a')
。尝试放置
x=('a'| e'| i'| o'| u'| y')
并查看输出。所以你的答案是a

另一种选择是执行类似于
(['a'、'e'、'i'、'o'、'u'、'y'])的操作
lettre==('a'| e'| i'| o'|'u'| y')
实际上相当于
lettre==('a')
。尝试放置
x=('a'| e'| i'| o'| u'| y')
并查看输出。所以你的答案是a


另一种选择是执行类似于
(['a'、'e'、'i'、'o'、'u'、'y'])的操作

问题在于您的if状况。首先,您需要了解如何在javascript中进行短路操作

在计算条件时,javascript将执行尽可能少的工作量来计算布尔答案


在| |(逻辑or)的情况下,如果您执行以下操作:

if (condition1 || condition2 || condition3) {
    // do something
}
if (condition1 && condition2 && condition3) {
    // do something
}
如果condition1为true,那么它只会计算condition1,它永远不会运行condition2和condition3,因为无论它们是否为true,结果都将为true

如果condition2为false,那么它将继续计算condition2并在第一个true条件处停止


在&&(逻辑and)的情况下,如果您执行以下操作:

if (condition1 || condition2 || condition3) {
    // do something
}
if (condition1 && condition2 && condition3) {
    // do something
}
这里短路的工作原理不同,一旦遇到错误值,它就会停止计算。因为不管结果如何,结果都是假的


Javascript中的错误值是

  • 假的
  • 0
  • “”(空字符串)
  • 空的
  • 未定义
  • NaN(例如1/0的结果)

回到你的例子:

'a'|| 'e' || 'i' || 'o' || 'u' || 'y'
“a”的计算结果始终为true,因此整个条件将返回第一个truthy值:“a”

然后你的情况简化为

if (letters === 'a')
你在anaconda有多少个“a”?因此,这就是为什么你得到3个元音



建立条件的第二种方法是正确的。如果要搜索数组中的元素,可以使用

,问题在于If条件。首先,您需要了解如何在javascript中进行短路操作

在计算条件时,javascript将执行尽可能少的工作量来计算布尔答案


在| |(逻辑or)的情况下,如果您执行以下操作:

if (condition1 || condition2 || condition3) {
    // do something
}
if (condition1 && condition2 && condition3) {
    // do something
}
如果condition1为true,那么它只会计算condition1,它永远不会运行condition2和condition3,因为无论它们是否为true,结果都将为true

如果condition2为false,那么它将继续计算condition2并在第一个true条件处停止


在&&(逻辑and)的情况下,如果您执行以下操作:

if (condition1 || condition2 || condition3) {
    // do something
}
if (condition1 && condition2 && condition3) {
    // do something
}
这里短路的工作原理不同,一旦遇到错误值,它就会停止计算。因为不管结果如何,结果都是假的


Javascript中的错误值是

  • 假的
  • 0
  • “”(空字符串)
  • 空的
  • 未定义
  • NaN(例如1/0的结果)

回到你的例子:

'a'|| 'e' || 'i' || 'o' || 'u' || 'y'
“a”的计算结果始终为true,因此整个条件将返回第一个truthy值:“a”

然后你的情况简化为

if (letters === 'a')
你在anaconda有多少个“a”?因此,这就是为什么你得到3个元音



建立条件的第二种方法是正确的。如果要搜索数组中的元素,可以使用

尝试一些随机顺序,如
(lettre==('e'| |'a'| |'o'| |'i'| |'u'| |'y')
。。你会得到剧本的