我一直在阅读一些教科书来学习网络开发,但我对一个例子感到困惑。该示例创建一个 meter 元素并用一些属性填充它。然后有一些 javascript 来检查浏览器对标签的支持。我感到困惑的部分是在第一个表达式为支持返回 true 或 false 之后,难道不应该检查以下 if 语句是否返回 true 或 false 吗?顺便说一句,当创建元素构建时,元素所做的是为其提供默认值,或者从 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()
时执行返回 true
. if
中的条件声明需要一些“真实”的东西,即可以解释为 true
的东西或 false
.由于该函数返回一个 bool 值,这就足够了。 (请参阅 truthiness javascript 的第一个 Google 命中,这是一个很好的解释。)
编辑:忘记了你的第二个问题。使用 document.createElement
创建新元素时,它确实获得了默认值。在您的示例中,默认值为 max
对于 <meter>
为 1。
关于javascript传递 bool 比较混淆的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042303/