三元运算符和赋值:不调用同一个函数两次的更好方法

Ternary operator and assignment: better way for not calling the same function twice

我有这个代码行:

const my_v = !isNaN(parseInt(jQuery('#id').val())) ? parseInt(jQuery('#id').val()) : 0;

如您所见,我调用了 parseInt 函数两次。
我想知道是否有一种方法可以完成一次调用函数的赋值。

确定使用 IIFE:

 (n => !isNaN(n) ? n : 0)(parseInt(jQuery('#id').val()))

但说真的,请使用局部变量。

parseInt() 的结果将是数字或 NaN,因此您可以使用 ||:

const my_v = parseInt(jQuery("#id").val()) || 0;

现在,一般来说,我会警告任何人不要使用 parseInt(),因为(按照设计)它接受像“123hello world”这样的字符串作为有效数字(在本例中为 123)。您可以使用 Number() 构造函数或普通一元 + 将字符串强制转换为数字。如果你不想要小数部分,你可以使用 Math.floor()Math.round(),你可以检查数字以查看是否有小数部分是否应该被视为错误。

如果您已经有一个字符串整数值,您可以只取一个数字或零作为默认值。

const my_v = +jQuery('#id').val() || 0;

如果不是,先取值再取整数部分。

const my_v = Math.floor(+jQuery('#id').val() || 0);

一个 const 你可以声明多个变量。

const idValue = parseInt(jQuery('#id').val()), my_v = isNaN(idValue) ? 0 : idValue;