javascript传递 bool 比较混淆的结果

标签 javascript css

我一直在阅读一些教科书来学习网络开发,但我对一个例子感到困惑。该示例创建一个 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/

相关文章:

css - 具有路由和响应模式的 Angular 4 案例

html - 在 HTML 中,如何在 li 之前抑制 ul 之后的换行

javascript - 如何知道 DOM 何时完成渲染

javascript - 向 POST 请求发送成功响应

javascript - 如何在 AngularJS 中制作 Gmail 的分享按钮?

javascript - 从 Node 请求整个链时误解区 block 链的 websocket 通信

html - 为什么 IE hacks 对我不起作用?

javascript - 同步 setInterval 和 transition 的正确方法

javascript - 交换两个 div(或与此相关的任何对象)的堆叠顺序

css - 获取:before pseudo element to use background image of parent