Javascript返回和三元操作符与var,可能的

Javascript return and ternary operator with var, possible?

本文关键字:var 操作符 三元 返回 Javascript      更新时间:2023-09-26

我很抱歉,如果这个问题是重复的,但我真的不知道如何搜索它。对于一个JavaScript编程专家来说,这个问题可能听起来很"奇怪",但我不是。

我基本上是想做一个"一行返回",而不浪费另一行代码。我知道不好,下面的代码也不是用于生产的代码:

var _ = require('underscore');
module.exports = function (digits) {
    if (!/^'d+$/.test(digits)) return undefined;
    var precomp = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
    var sum = _.reduce(digits.toString(), function (mem, dgt, idx) {
        return mem + (idx % 2 == 0 ? parseInt(dgt) : precomp[dgt]);
    }, 0);
    return (var mod = sum % 10 == 0) ? 0 : 10 - mod; // Error
};

最后一行抛出错误,因为var关键字。我记得有时在PHP中也会这样做。

EDIT:我不认为在回答之前阅读问题那么"难"…我问的是它是否可能,我并不是说它是对的,好看的,或者其他什么。

(顺便说一下,这是luhn检查计算)

VariableDeclaration不是表达式。

module.exports = function (digits) {
    var mod;
    // ...
    return (mod = sum % 10 ...
}

我觉得你太用力了。只需将var mod移到return语句之前。你不会因为这里多了一行代码而被软件之神打死。清晰胜于简洁。

JavaScript不是PHP

var mod = sum % 10;
return (mod === 0) ? 0 : 10 - mod;

我认为你唯一的办法是:

var mod = sum % 10;
return (mod == 0) ? 0 : 10 - mod;

谁在乎多出一行代码呢?为什么这很重要?

到目前为止,我发现你不喜欢任何一个答案。避免首先声明变量的一种方法是这样的,您可能也不喜欢:

return (sum % 10 == 0) ? 0 : 10 - (sum % 10);

这并不需要额外的行,但它确实需要额外的mod。


另一个可能会使代码非常混乱的选项是向函数添加一个虚拟参数:
module.exports = function (digits, mod) {
    /* code */
    return (mod = sum % 10) == 0 ? 0 : 10 - mod; // Error
};

由于您不将sum用于任何其他目的,您可以将%操作符上移,执行:

var _ = require('underscore');
module.exports = function (digits) {
    if (!/^'d+$/.test(digits)) return undefined;
    var precomp = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
    var sum = _.reduce(digits.toString(), function (mem, dgt, idx) {
        return mem + (idx % 2 == 0 ? parseInt(dgt) : precomp[dgt]);
    }, 0) % 10;
    return (sum == 0) ? 0 : 10 - sum; // Error
};