javascript - 这个 prettyDate 函数是如何工作的?好像它有多个返回值

标签 javascript

我在改编 John Resig 的 prettyDate 函数的 Smashing Node 一书中看到了这段代码片段。我不明白函数如何返回一个字符串,当它显然是一个 bool 值时。

Date.prototype.__defineGetter__('ago', function () {
    var diff = (((new Date()).getTime() - this.getTime()) / 1000)
    , day_diff = Math.floor(diff / 86400);
    return day_diff == 0 && (
        diff < 60 && "just now" ||
        diff < 120 && "1 minute ago" ||
        diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
        diff < 7200 && "1 hour ago" ||
        diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + " days ago" ||
        Math.ceil( day_diff / 7 ) + " weeks ago";
});

var a = new Date('11/05/1989');
console.log(a.ago); // outputs '1264 weeks ago'

最佳答案

运算符 ||&& 在 Javascript 中不严格返回 bool 值。

x ||如果 y 为真,则求值为 x,否则为 y;如果 x && y 为假,则计算结果为 x,否则为 y。因此它们都可以产生任何类型的值。

你会看到这种类型的用法在几个场景中使用,例如为参数分配默认值,例如:

// not the best example, but makes the point
function increment(i, step) {
    return i + (step || 1);
}

甚至

function firstNonZero(a, b, c) {
    return a || b || c || null;
}

关于javascript - 这个 prettyDate 函数是如何工作的?好像它有多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370209/

相关文章:

javascript - 我可以在 React 和 Redux 中发送 AJAX 调用,而无需使用操作创建器和缩减器吗?

javascript - 如何在客户端运行程序或批处理文件?

javascript - 如何将回调从一个子组件传递到另一个子组件

javascript - 从链接中选择单选按钮

javascript - 用于 polymer 0.8 的 Yeoman polymer

javascript - 如果我需要 react 虚拟化,如何在 DOM 中呈现整个网格?

javascript - 具有反应式布局的 HTML 应用程序的设计模式/工具?

javascript - 如何处理 Facebook Connect 超时

javascript - 跳过不存在的对象(过滤)React-Native

javascript - 如何跟踪用户点击浏览器上的后退按钮