#javascript
#javascript
Вопрос:
Я создал программу, которая сообщает вам программу, которая принимает число в JavaScript и сообщает вам различные свойства этого числа.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<script>
var div_sum = 0
var num = Number(prompt('Please enter the number'))
var pn_result = true
for(var i = 2; i < num; i ){
if(num % i === 0){
var pn_result = false
break
}
}
if(pn_result){
alert(String(num) 'is a prime')
} else {
alert(String(num) 'is not a primen' String(num) '=' String(i) 'x' String(num / i))
}
var div_list = []
for(var div = 1; div < num 1; div ){
if(num % div === 0){
div_list.push(div)
}
}
var div_len = div_list.length
alert('Number of divisor is' String(div_len) )
for(var i = 0; i < div_len 1; i ){
var div_sum = div_sum div_list[i]
}
var div_sum = div_sum - num
alert(div_sum)
</script>
</body>
</html>
В конце мне стало любопытно, было ли это число идеальным числом, поэтому я вывел сумму делителя, исключая себя.
Но результат выполнения вышел как ‘NaN’.
Как ни странно, другие операции выполнялись в завершенном состоянии. Что такое ‘NaN’ и как мне это исправить?
Комментарии:
1. NaN означает «не число» — что
Number('abcde')
приводит кNaN
— кстати,typeof NaN === 'number'
итак, не число — это число: p — что касается «как мне это исправить»… это не сломано, это число, которое не является числом (поэтому NaN имеет методы toFixed, toPrecision и toExponential, как и любое другое число)2. Я бы рекомендовал в качестве ПЕРВОГО теста после
var num = Number(prompt('Please enter the number'))
проверки, еслиisNaN(num)
илиNumber.isNaN(num)
, чтобы избежать дальнейших осложнений в вашем коде (обратите внимание, не проверяйте, еслиnum === NaN
посколькуNaN !== NaN
Ответ №1:
Основная проблема заключается в этой строке. Вы повторяете на 1 раз больше, чем длина div_list
.
for(var i = 0; i < div_len 1; i ){
var div_sum = div_sum div_list[i]
}
Это должно быть
for(var i = 0; i < div_len; i ){
var div_sum = div_sum div_list[i]
}
Другие проблемы включают в себя повторное объявление div_sum
внутри for loop
и снова сразу снаружи. Вы должны объявить его только один раз, а затем переназначить ему новые значения как таковые.
var div_sum = 0;
for(var i = 0; i < div_len 1; i ){
div_sum = div_sum div_list[i]
}
div_sum = div_sum - num;
И, наконец, вы также должны использовать camelCase
для именования JavaScript
переменных. Это нормальное соглашение. Вместо этого вы используете snake_case
соглашение, которое обычно не используется на JavaScript
земле.
Ответ №2:
измените это
for(var i = 0; i < div_len 1; i )
{
var div_sum = div_sum div_list[i]
}
к этому, и это будет работать
for(var i = 0; i < div_len; i )
{
var div_sum = div_sum div_list[i]
}