三元运算符是NaN

时间:2016-05-05 12:50:10

标签: javascript numbers boolean

我想检查1)数字是偶数还是奇数2)如果值不是数字,则打印一条说“不是数字”的消息。我使用了if else语句,但我正在尝试使用三元语句进行练习,这是代码:

function even_or_odd(number) {

  return number % 2 === 0 ? "Even" : number % 2 !== 0 ? "Odd" : isNaN(number) ? "not a number" : "";

}

console.log(even_or_odd(hi));

它适用于数字,成功打印“偶数”或“奇数”但在isNaN中失败。

小提琴:https://jsfiddle.net/DimitriXd4/bwfhmqfm/7/

我做错了什么?

4 个答案:

答案 0 :(得分:3)

你很接近,只是先检查isNaN,因为它与其他两个检查无关。

function even_or_odd(number) 
{   
  return isNaN(number) ? "not a number" : ( number % 2 === 0 ? "Even" : "Odd" );
}

答案 1 :(得分:1)

使用三元运算符的双重或三重嵌套条件的问题是您需要封装它们。以这种方式使用它:

return (number % 2 === 0) ? "Even" : ((number % 2 !== 0) ? "Odd" : (isNaN(number) ? "not a number" : ""));

同时添加isNaN(number)作为第一次检查。

答案 2 :(得分:1)

问题是NaN % 2 !== 0是正确的,因此即使您传递的值可以评估为NaN,您也会看到结果为“奇数”。

将您的情况从number % 2 !== 0更改为number % 2 === 1将解决您的问题。

DEMO

答案 3 :(得分:1)

很多答案,你的代码非常接近,你需要做的就是删除明确的奇数测试。如果前两个测试都失败,则不需要第三个,结果必须是NaN。

function even_or_odd(number) {
  return number%2 === 0? 'Even' : number%2? 'Odd' : 'Not a number';
}

document.write(even_or_odd('hi'));