JavaScript代码高尔夫:判断变量存储数字的最短写法
JavaScript代码高尔夫:判断变量为数字(兼容0)的最短写法
场景前提
已知待判断变量x只会是两种类型:undefined或者数字,不存在空字符串、null、布尔值等其他会干扰真假判断的值。核心需求是判断指定位置存的是数字(必须兼容数字0,不能把0误判为无效值)还是undefined。
目前已知两种常规实现:
// 显式判断0,共7个字符 x||x==0 // 基于isNaN判断,共8个字符 !isNaN(x)
就算反转if-else逻辑省掉!取反符,整体长度还是比显式判0的写法长,还有很大压缩空间。
最短实现(3字符)
直接用1/x作为判断条件即可,完全适配当前场景:
if(1/x) { // x为数字(包含0、正负整数、浮点数) } else { // x为undefined }
判定逻辑说明
这个写法利用了JS的类型转换和除法运算特性,在当前约束下没有判定误差:
- 当x是数字0(包括-0)时,
1/x会得到Infinity/-Infinity,转布尔值为true,完美绕开0是假值的问题 - 当x是其他非NaN数字时,
1/x得到非零数值,转布尔值为true - 当x是
undefined时,1/undefined返回NaN,转布尔值为false - 当x是
NaN时,1/NaN返回NaN,转布尔值为false,和原有x||x==0的判定表现完全一致
注意:这个写法强依赖题目给出的类型约束,如果变量可能出现
null(1/null返回Infinity会误判)、字符串等其他类型,不能直接使用。
长度对比
| 实现写法 | 字符长度 |
|---|---|
1/x | 3 |
x||x==0 | 7 |
!isNaN(x) | 8 |
内容的提问来源于stack exchange,提问作者CADBOT
相关产品推荐
相关产品推荐

