我一直在学习一些教科书来学习网页开发,我对一个例子感到困惑。该示例创建一个仪表元素并用一些属性填充它。然后有一些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);
}
答案 0 :(得分:2)
只有在if
返回noMeterSupport()
时才会执行true
的正文。 if
语句中的条件需要“truthy”,即可以解释为true
或false
的内容。由于函数返回一个布尔值,这就足够了。 (请参阅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
。
比较将是true
或false
,好吗?
所以,现在,当你做
时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)
作为初学者,在编程中快速学习有两点:
==
和===
不仅进行比较,而且实际上返回了此比较的结果(您可以将其放在var中进行测试)var bool = 1 === 2; console.log(bool); // will print false
if(boolean === true)
相当于if(boolean)
,测试if(boolean === false)
相当于if(!boolean)