js 判断一个数是否为正整数?

if ( ( ( number - 0 ) | 0 ) !== number - 0 ){ // 输入购买数量是否为正整数

nextBtn.disabled = true;
nextBtn.innerHTML = '请输入正确的购买数量';
return;

}
书上看到这样的代码 ( number - 0 ) | 0 ) !== number - 0
负数 或 0 还不是负数吗?
是不是写错了

如果写错了 按这本书的写法可以怎么写呢?

请大佬帮忙!谢谢了

阅读 15.8k
4 个回答

原回答: 只是为了判断number为正整数吗? number > 0 && Number.isInteger(number)

根据作者意图做出解释修正:

你这个判断的关键在那个按位或操作符上,如果number是整数的话,比如 10, 那么 10 | 0 == 10, 但是 如果是小数的话,或出来的结果也是整数 10.1 | 0 == 10。同时有number - 0 操作,那么如果number == 'abc'这样的字符串 number - 0 == NaN 这时候再按位与为 NaN | 0 == 0 就避免了报错。

回到你的条件,如果number是整数,那么条件不成立,也就不用提示用户再输入正确的数量,如果number是小数,那么条件成立,提示用户输入正确的数量。这个条件不会判断正负,只关心是不是整数。如果number 是 '123'这样的字符串,条件不成立, 如果是 'abc' 这样的字符串,条件成立。

结论: 书上没写错。这个条件会在用户输入小数,非数字的字符串时成立。

如果非要判断>0的话,可以这样写

if ((( number - 0 ) | 0 ) !== (number - 0) && (( number - 0 ) | 0 ) <= 0)

纠正2楼的答案:(1 | 0 = 1, 0 | 0 = 0, 1 | 1 = 1)

新手上路,请多包涵

~~number === number

正整数,其实很简单啊,只需要三步 if ,一,它不是非数字 isNaN ,二,它是整数,用 取整处理后对比是否一样等值,如果是则是整数,否则非整数,三,它不是负数,即比 0 大。就是这样了。当然,如果你要简洁的写法,可以研究找找。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题