#javascript #html #function
Вопрос:
lt;!doctype htmlgt; lt;htmlgt; lt;scriptgt; function isNumber(value) { return typeof (value) != "boolean" amp;amp; !isNaN(value) amp;amp; value.length gt; 0; } function minMaxDefrost(value, min, max) { if (value.length == 0 || value == "-") return value; if (!isNumber(value)) return value.substring(0, value.length - 1); console.log("minMaxDefrost called ") if (parseFloat(value) lt; min){ return min; } else if (parseFloat(value) gt; max){ return max; } else { return Math.floor(value); } } minMaxDefrost(4, 0, 12); lt;/scriptgt; lt;/htmlgt;
- Я использую эту функцию в функции html-ключа, и она работает нормально, но когда я пытаюсь вызвать ее самостоятельно в начале кода, я получаю сообщение об ошибке, не пойманное TypeError: значение.подстрока не является функцией
- также нет, когда я вызываю эту функцию из ключа, который я использую «this.value = minMaxDefrost(это.значение, -80, 150, 0)
- я предполагаю, что ошибка связана с этим.значением, но я не знаю, как это исправить
Комментарии:
1. Ваша
isNumber()
функция фактически вернет значение false, если вы введете число… И ты не можешь взять аsubstring()
из числа.2. Почему ты занимаешься
value.length
цифрами?3. аналогично, зачем вам понадобилось работать
.substring()
с цифрами?4. @Bergi Я предполагаю, что это для проверки пустых строк во входных данных?
5. Тогда почему бы просто не сделать
if( value.constructor !== Number) { ... }
это ?
Ответ №1:
isNumber
не совсем выполняет свою работу, как предлагает Марк Ханна.. а лучше isNumber
было бы что-то вроде
function isNumber(num){ let num1=num-0, num2=num-1 return num2!=num1 amp;amp; !!(num2||num1) amp;amp; typeof(num)!="object" //Infinity would fail the test num2!=num1 //Normal non-numbers would fail !!(num2||num1) //null would fail typeof(null)!="object" //However, 0, and even "0" will pass this test }
Вот он возвращен в коде, который вы нам дали
function isNumber(num){ let num1=num-0, num2=num-1 return num2!=num1 amp;amp; !!(num2||num1) amp;amp; typeof(num)!="object" //Infinity would fail the test num2!=num1 //Normal non-numbers would fail !!(num2||num1) //null would fail typeof(null)!="object" //However, 0, and even "0" will pass this test } function minMaxDefrost(value, min, max) { if (value.length == 0 || value == "-") return value; if (!isNumber(value)) return value.substring(0, value.length - 1); console.log("minMaxDefrost called ") if (parseFloat(value) lt; min){ return min; } else if (parseFloat(value) gt; max){ return max; } else { return Math.floor(value); } } minMaxDefrost(4, 0, 12);
Ответ №2:
isNumber(4)
вычисляется до false
, поэтому вы пытаетесь вызвать substring
метод 4
, но его не существует. Используйте typeof value === 'number'
вместо этого, чтобы проверить, является ли что-то числом. Или еще лучше, используйте typeof value === 'string'
, прежде чем относиться к нему так, как будто это определенно строка.