parseInt()的NaN错误

时间:2017-08-18 20:23:25

标签: javascript



function square(num) {
      var numbers = num.split(" "),
      sq1 = numbers[0] * numbers[0],
      sq2 = numbers[1] * numbers[1];
      var result = Math.abs(sq2 - sq1);
      return parseInt(result);
}
console.log(square(3 4))




我收到错误NaN。有人可以告诉我如何解决这个问题吗?

Test Case #1
call: square(4 2);
expect: 12

Test Case #2
call: square(3 4)
Expected output: 7

4 个答案:

答案 0 :(得分:2)

您需要使用字符串调用该函数。

  • 以字符串作为参数调用函数。
  • *强制操作数到数字。
  • 建议不要使用
  • parseInt来设置整数,而是使用Math.floor



function square(num) {
    var numbers = num.split(" "),
        sq1 = numbers[0] * numbers[0],
        sq2 = numbers[1] * numbers[1];

    return Math.abs(sq2 - sq1);
}

console.log(square('4 2')); // string with space separated numbers
console.log(square('3 4'));




答案 1 :(得分:1)

您的问题是,当您致电split时,您会收到一系列字符串。当你打电话

 sq1 = numbers[0] * numbers[0],
 sq2 = numbers[1] * numbers[1];

您正在将*操作应用于字符串。因此,当您稍后使用parseInt()时,您解析的字符串不再是数字的有效字符串表示形式。

呼叫

sq1 = parseInt (number[0]) * parseInt (number[0]),
sq2 = parseInt (number[1]) * parseInt (number[1]);

(注意,如果字符串不是浮点数,则一元加号运算符与parseInt执行相同操作,如果预期浮点数会更好

用法:

+"123.1" !== parseInt("123.1");
+"123" === parseInt("123");

然后移除parseInt进行修复,如下所示:

var result = Math.abs( sq1 - sq2);

答案 2 :(得分:1)

  方形(3 4)   [当它应该是方形(“3 4”)]

但是,您的代码没有得到很好的优化。

这是一个好方法:

<nav>
    <ul>
        <li><a href="http://google.com/" class="logo">BOOMYEAH</a></li>
        <li class="abstand-top"><a href="#"><img src="Images/icon-facebook.svg" alt=""></a></li>
        <li class="abstand-top"><a href="#"><img src="Images/icon-instagram.svg" alt=""></a></li> 
        <li class="abstand-top"><a href="http://google.com/">WORK   &nbsp; &nbsp; &nbsp;  |</a></li>
        <li class="abstand-top"><a href="http://google.com/">ABOUT</a></li>
        <li class="abstand-top"><a href="http://google.com/">CREW</a></li>
        <li class="abstand-top"><a href="http://google.com/">CONTACT</a></li>
       
    </ul>
</nav>


<div id="video-container">
<video id="bgVid" loop class="fillWidth" autoplay>
<source src=http://bigcom.com/assets/2014/08/iChooseB.mp4 type=video/mp4>
</video> 
</div>

所以,这会使你的功能保持不变,但这是一个更好的方法:

function square(num) {
  var numbers = num.split(" ");
  for(var i = 0; i < numbers.length; i++) {
    numbers[i] = Math.pow(parseInt(numbers[i]),2)
  }
  var result = Math.abs(numbers[1]-numbers[0]);
  return result;
}
console.log(square('4 3'))

在此示例中,您可以使用数字作为参数而不是字符串!

这里的大问题是:

function diff_Squares(num1,num2) { return Math.abs(Math.pow(num2,2)-Math.pow(num1,2)); } square(2,3) 只有在输入不是数字时才返回 parseInt()(有点自我解释)。 NaN不是错误,它是一个值。

你说你必须检查测试用例..这是在线编码课程还是其他什么?如果是这样,他们可能会将您的工具库保持在最低限度。像其他人说的那样,*会自动使字符串呈现正确的类型,因此您收到错误的响应(NaN)会很奇怪。

答案 3 :(得分:0)

我认为实现目标的更好的方法是在函数中分离计算函数中的拆分逻辑。这将使您的代码更易于重复使用

CalculateSquare

function calculateSquare(a, b) {
  return Math.abs((b * b) - (a * a))
}

实施例

function calculateSquare(a, b) {
  return Math.abs((b * b) - (a * a))
}

var numbers = '4 2'.split(' ')
var result = calculateSquare(numbers[0], numbers[1])

console.log(result)

ES6示例

var numbers = '4 2'.split(' ')

function calculateSquare(a, b) {
  return Math.abs((b * b) - (a * a))
}

console.log(calculateSquare(...numbers))

只需一行calculateSquare(...'4 2'.split(' '))