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