javascript传递布尔比较混淆的结果

时间:2015-03-13 21:30:52

标签: javascript css3

我一直在学习一些教科书来学习网页开发,我对一个例子感到困惑。该示例创建一个仪表元素并用一些属性填充它。然后有一些javascript来检查浏览器对标签的支持。我感到困惑的部分是在第一个表达式为支持返回true或false之后,不应该检查if if语句是否返回true或false?另外,当create元素构建元素时,它会给它默认值,或者从html中的现有仪表中获取值。

支持检查如下。

var noMeterSupport = function(){
    return(document.createElement('meter').max === undefined);
}

如果未找到支持,则构建仪表的下一部分如下所示。这是我感到困惑的地方,因为它似乎取任何一个值并继续而不检查它是真还是假。

if (noMeterSupport()) {
    var fakeMeter, fill, label, labelText, max, meter, value;
    value = meter.attr("value");
    meter = $("#pledge_goal");
    max = meter.attr("max");
    labelText = "$" + meter.val();

    fakeMeter = $("<div></div>");
    fakeMeter.addClass("meter");
    label = $("<span>" + labelText + "</span>");
    label.addClass("label");

    fill = $("<div></div>");
    fill.addClass("fill");
    fill.css("width",(value / max * 100) + "%");
    fill.append("<div style='clear:both;'><br></div>");
    fakeMeter.append(fill);
    fakeMeter.append(label);
    meter.replaceWith(fakeMeter);
 }

8 个答案:

答案 0 :(得分:2)

只有在if返回noMeterSupport()时才会执行true的正文。 if语句中的条件需要“truthy”,即可以解释为truefalse的内容。由于函数返回一个布尔值,这就足够了。 (请参阅truthiness javascript的第一次Google搜索,这是一个很好的解释。)

编辑:忘了你的第二个问题。使用document.createElement创建新元素时,确实会获得默认值。在您的示例中,max的默认值<meter>为1。

答案 1 :(得分:0)

if (noMeterSupport()) {检查返回值。它意味着完全相同:

var supported = noMeterSupport();
if(supported) {

答案 2 :(得分:0)

我希望我能正确理解你的问题并尝试回答。


所以你会期待这样的事情:

if (noMeterSupport() == true)

实际上,这相当于:

if (noMeterSupport())

如果你想检查错误:

if (noMeterSupport() == false)

这相当于:

if (!noMeterSupport())

答案 3 :(得分:0)

此语句将使函数返回true或false:

return(document.createElement('meter').max === undefined)

基本上它与写作同义:

if(document.createElement('meter').max === undefined) {
    return true;
} else {
    return false;
}

这使得noMeterSupport()的值为true或false。

答案 4 :(得分:0)

var noMeterSupport = function(){
    return(document.createElement('meter').max === undefined);
}

noMeterSupport会返回比较结果document.createElement('meter').max === undefined

比较将是truefalse,好吗?

所以,现在,当你做

if (noMeterSupport()) { /*then do something*/}

就像说

if (/*the result of noMeterSupport() is true*/) {/*then do something*/}

因此,只有在if返回noMeterSupport时才会运行此true语句

答案 5 :(得分:0)

var noMeterSupport = function(){
    return(document.createElement('meter').max === undefined);
}

这部分代码实际上没有进行检查,它是定义一个名为noMeterSupport的函数。

在调用函数之前,代码实际上不会运行。通过在函数名称中添加()来调用它。

noMeterSupport()

你的if()语句就像括号一样被调用。

答案 6 :(得分:0)

你期望if语句中有一个布尔条件:

if(<boolean_condition>)
{
...
}

noMeterSupport()实际上返回true或false,所以

if(noMeterSupport())

已转换为if(true)if(false) 取决于document.createElement('meter').max === undefined评估的结果。

您正在接收布尔条件,if语句正常工作。

答案 7 :(得分:0)

作为初学者,在编程中快速学习有两点:

  1. 比较运算符=====不仅进行比较,而且实际上返回了此比较的结果(您可以将其放在var中进行测试)
  2. var bool = 1 === 2;
    console.log(bool); // will print false
    
    1. 测试if(boolean === true)相当于if(boolean),测试if(boolean === false)相当于if(!boolean)