Javascript中布尔逻辑的顺序是什么?

时间:2016-03-14 18:34:00

标签: javascript

我想使用两个Not和一个以及布尔值来测试变量既不是大写也不是小写。

到目前为止,我使用了此代码,但它并没有按要求运行:

else if ((x[i]) !== (x[i].toUpperCase()) && (x[i]!== x[i].toLowerCase()) ){
    x.splice(x[i], 1);
}

此代码用于对输入的字符串进行排序的函数,但首先对大写进行排序。

这是完整的代码,除了布尔逻辑和我使用的数组方法之外,我也愿意理解创建这个函数的更好方法。

function alpha(str){ // United States

    var x = str.split(""); // [U,n,i,t,e,d,S,t,a,t,e,s]
    var cap = [];
    var small = [];


    for (var i = 0; i<x.length; i++){

        if (x[i] == x[i].toUpperCase()){
            cap.push(x[i]);
        }

        else if ((x[i]) !== (x[i].toUpperCase()) && (x[i]!== x[i].toUpperCase()) )  {
            x.splice(x[i], 1);
        }
        else {small.push(x[i]);}
}


    var z = cap.sort();
    var y = small.sort();
    return z.concat(y).join("");

}

请注意第二个if if语句只是有用,因为代码在输出的开头添加了一个空的空格字符串,我不知道它来自哪里,所以如果你有任何想法请告诉我即使不使用第二个if,如何对此进行排序。

3 个答案:

答案 0 :(得分:1)

在ASCII表中,大写字母首先出现。这就是为什么当你按字母顺序排序时它们首先出现的原因。这是指向Wikipedia上的页面的链接,该页面显示首先出现大写字母的表格及其数字等价物。它甚至可以打印。

另外,我冒昧地简化了你的代码。好像.splice()似乎没必要。

function alpha( str ) {

    var x = str.split(""); // [U,n,i,t,e,d,S,t,a,t,e,s]
    var cap = [];
    var small = [];
    var length = x.length;

    for (var i = 0; i < length; i++) {
        if (x[i] === x[i].toUpperCase()) {
            cap.push(x[i]);
        } else if (x[i] === x[i].toLowerCase()) {
            small.push(x[i]);
        }           

    }

    return cap.sort().concat(small.sort()).join("");

}

也许解释一下你要做什么?它很可能以某种形式完成,你肯定来到了正确的地方找到答案。

答案 1 :(得分:1)

这是你想要做的吗?

&#13;
&#13;
var str = "United States";

function alpha(str) {
  return str.split('').sort().join('');
}

alert(alpha(str));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

在所有编程语言中(据我所知),布尔表达式总是从左到右依次用括号进行评估。

因此,在下面的示例中,首先调用my_func(),然后如果完整表达式有可能变为true,则调用my_other_func()

if (my_func() && my_other_func()) {
    // I only get here if my_func() AND my_other_func() return true
    // If my_func() returns false, my_other_func() is never called
}

&#34;或&#34;同样如此。以下示例中的运算符

if (my_func() || my_other_func()) {
    // I only get here if my_func() OR my_other_func() return true
    // If my_func() returns true, my_other_func() is not called
}

回到你的代码,详细介绍了这部分内容(为了更好的可读性,我对其进行了重新格式化):

    if (x[i] == x[i].toUpperCase()){
        // only uppercase here
        cap.push(x[i]);
    } else if (x[i] !== x[i].toUpperCase() && x[i] !== x[i].toUpperCase()) {
        // tested twice the same thing, so Im really sure that its not uppercase :D
        // only lowercase here
        x.splice(x[i], 1);
    } else {
        // I will never reach this
        small.push(x[i]);
    }

我不确定你想做什么,但我希望这些评论有助于理解你的代码。