传递布尔比较结果的javascript

传递布尔比较结果的javascript,javascript,css,Javascript,Css,我一直在阅读一些教科书来学习web开发,但我对一个例子感到困惑。该示例创建了一个meter元素,并用一些属性填充它。然后有一些javascript来检查浏览器对标记的支持。我感到困惑的是,在第一个表达式为支持返回true或false之后,是否应该检查下面的if语句是否返回了true或false?另外,当create元素构建时,该元素会为其提供默认值,或者从html中的现有度量值中获取值 支撑检查如下所示 var noMeterSupport = function(){ return(do

我一直在阅读一些教科书来学习web开发,但我对一个例子感到困惑。该示例创建了一个meter元素,并用一些属性填充它。然后有一些javascript来检查浏览器对标记的支持。我感到困惑的是,在第一个表达式为支持返回true或false之后,是否应该检查下面的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);
 }
if(noMeterSupport()){
var假量计、填充、标签、标签文本、最大值、仪表、值;
值=仪表属性(“值”);
米=$(“#承诺#目标”);
最大值=仪表属性(“最大”);
labelText=“$”+meter.val();
伪造者=$(“”);
伪造仪表。添加等级(“仪表”);
标签=$(“”+labelText+“”);
label.addClass(“label”);
填充=$(“”);
填充。添加类别(“填充”);
填充.css(“宽度”,(值/最大值*100)+“%”;
填充。追加(“
”); 伪造者。追加(填写); 伪造者。附加(标签); 仪表。替换为(假仪表); }
只有当
noMeterSupport()
返回
true
时,才会执行
if
的主体。
if
语句中的条件需要某种“真实”的东西,即可以解释为
true
false
的东西。由于函数返回一个布尔值,这就足够了。(请参见第一次谷歌点击,这是一个很好的解释。)

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

如果(noMeterSupport()){
检查返回值。其含义与此完全相同:

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

我希望我能正确理解你的问题,并尽力回答


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

if (noMeterSupport() == true)
实际上,这相当于:

if (noMeterSupport())

如果要检查false:

if (noMeterSupport() == false)
这相当于:

if (!noMeterSupport())

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

return(document.createElement('meter').max === undefined)
基本上,它是写作的同义词:

if(document.createElement('meter').max === undefined) {
    return true;
} else {
    return false;
}
这使得noMeterSupport()的值为true或false

var noMeterSupport = function(){
    return(document.createElement('meter').max === undefined);
}
noMeterSupport
返回比较的结果
document.createElement('meter')。max==undefined

比较将是
true
false
,好吗

那么,现在,当你

if (noMeterSupport()) { /*then do something*/}
就像说

if (/*the result of noMeterSupport() is true*/) {/*then do something*/}
因此,此
if
语句仅在
noMeterSupport
返回
true

var noMeterSupport = function(){
    return(document.createElement('meter').max === undefined);
}
这段代码实际上并没有执行检查,而是定义了一个名为noMeterSupport的函数

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

noMeterSupport()

您的if()语句在括号中被调用。

您希望if语句中包含一个布尔条件:

if(<boolean_condition>)
{
...
}
转换为
if(真)
if(假)
取决于
document.createElement('meter')的结果。max==undefined
求值


您将收到一个布尔条件,if语句工作正常。

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

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

  • 因此,noMeterSupport()只能返回true或nothing?不,它可以返回任何内容。您的函数保证返回布尔值(true或false),因为它依赖于triple equals运算符。(如果我们想获得额外的知识,该函数保证返回false,因为“max”元素的属性默认为1,这不是未定义的。)我得到的不是part,但我不明白为什么if语句不检查它传递的是true还是false。我想这是一个愚蠢的问题,但我不知道。如果您希望的是
    if(noMeterSupport()==true)
    关于该条件的结果,您将再次收到
    true
    false
    ,if语句变为
    if(true)
    if(false)
    。谢谢,我现在明白了。
    if(noMeterSupport())
    
    var bool = 1 === 2; console.log(bool); // will print false