Як я можу перевірити, чи є змінна на сьогодні цілочисельним типом? Я шукав якийсь ресурс для цього, і я думаю, що оператор === важливий, але я не впевнений, як перевірити, чи є змінна цілим числом (або масивом з цього приводу)
Як я можу перевірити, чи є змінна на сьогодні цілочисельним типом? Я шукав якийсь ресурс для цього, і я думаю, що оператор === важливий, але я не впевнений, як перевірити, чи є змінна цілим числом (або масивом з цього приводу)
Відповіді:
Змінна ніколи не буде цілочисельним типом у JavaScript - вона не розрізняє різні типи числа.
Ви можете перевірити, чи мінлива містить число, і чи це число є цілим числом.
(typeof foo === "number") && Math.floor(foo) === foo
Якщо змінна може бути рядком, що містить ціле число, і ви хочете перевірити, чи це так:
foo == parseInt(foo, 10)
Число є цілим числом, якщо його модуль% 1 дорівнює 0-
function isInt(n){
return (typeof n== 'number' && n%1== 0);
}
Це настільки добре, наскільки отримує javascript - скажімо + - десять до 15 числа.
isInt(Math.pow(2,50)+.1)повертається true, як і робить
Math.pow(2,50)+.1 == Math.pow(2,50)
Я знаю, що ви зацікавлені у цілочисельних числах, тому я не відповім на це, але якщо ви коли-небудь захочете перевірити наявність чисел із плаваючою комою, ви можете це зробити.
function isFloat( x )
{
return ( typeof x === "number" && Math.abs( x % 1 ) > 0);
}
Примітка: Цей МОЖЕ розглядати числа, що закінчуються на .0(або будь-яку логічно еквівалентну кількість0 ), як ЦІЛИЙ. Насправді для виявлення значень з плаваючою точкою виникає помилка точності з плаваючою точкою.
Напр.
alert(isFloat(5.2)); //returns true
alert(isFloat(5)); //returns false
alert(isFloat(5.0)); //return could be either true or false
Досить багато службових бібліотек, таких як YourJS, пропонують функції для визначення, чи є щось масивом, чи це ціле число, або багато інших типів. YourJS визначає isInt , перевіряючи, чи є значення числом, а потім, якщо воно ділиться на 1:
function isInt(x) {
return typeOf(x, 'Number') && x % 1 == 0;
}
Вищезазначений фрагмент було взято з цього фрагменту YourJS і, отже, працює лише тому typeOf, що визначений бібліотекою. Ви можете завантажити мінімалістичну версію YourJS, яка в основному має лише функції перевірки типу, такі як typeOf(), isInt()та isArray(): http://yourjs.com/snippets/build/34,2
Ви також можете поглянути на Runtyper - інструмент, який виконує перевірку типу операндів у ===(та інших операціях).
Наприклад, якщо у вас є суворе порівняння x === yта x = 123, y = "123", воно автоматично перевірить typeof x, typeof yі покаже попередження в консолі:
Суворе порівняння різних типів: 123 (число) === "123" (рядок)
Ви можете розглянути можливість використання дуже маленької бібліотеки без залежностей, наприклад Not . Вирішує всі проблеми:
// at the basic level it supports primitives
let number = 10
let array = []
not('number', 10) // returns false
not('number', []) // throws error
// so you need to define your own:
let not = Object.create(Not)
not.defineType({
primitive: 'number',
type: 'integer',
pass: function(candidate) {
// pre-ECMA6
return candidate.toFixed(0) === candidate.toString()
// ECMA6
return Number.isInteger(candidate)
}
})
not.not('integer', 4.4) // gives error message
not.is('integer', 4.4) // returns false
not.is('integer', 8) // returns true
Якщо ви увійдете в звичку, ваш код стане набагато сильнішим. Машинопис вирішує частину проблеми, але не працює під час виконання, що також важливо.
function test (string, boolean) {
// any of these below will throw errors to protect you
not('string', string)
not('boolean', boolean)
// continue with your code.
}