Comment vérifier la présence d’une valeur vide en JavaScript ?

JavaScript ne dispose pas d’une méthode intégrée pour vérifier si une valeur est vide, mais il est facile d’en créer une. Avant de le faire, cependant, nous devons définir le comportement d’une telle méthode. Pour ce faire, nous nous sommes inspirés de la méthode de Rails blank? de Rails, mais modifiée pour s’adapter aux besoins de JavaScript.

Tout d’abord, toutes les valeurs fausses doivent être considérées comme vides. Il s’agit notamment de null, undefined, 0, false, ''et NaN.

const isFalsy = value => !value;

isFalsy(null); 
isFalsy(undefined); 
isFalsy(0); 
isFalsy(false); 
isFalsy(''); 
isFalsy(NaN); 

Deuxièmement, les tableaux et objets vides doivent également être considérés comme vides. Cela peut être facilement vérifié en utilisant Object.keys() pour les deux types de valeurs.

const isEmptyCollection = value =>
  (Array.isArray(value) || value === Object(value)) &&
  !Object.keys(value).length;

isEmptyCollection([]); 
isEmptyCollection({}); 

En plus de la chaîne vide (''), les chaînes comportant uniquement des espaces doivent également être considérées comme vides. Une expression régulière peut être utilisée pour vérifier cela.

const isWhitespaceString = value =>
  typeof value === 'string' && /^\s*$/.test(value);

isWhitespaceString(' '); 
isWhitespaceString('\t\n\r'); 

Enfin, nous pouvons vérifier certains objets intégrés couramment utilisés. Invalide Date ainsi que les instances vides Set et Map doivent toutes être considérées comme vides.

const isInvalidDate = value =>
  value instanceof Date && Number.isNaN(value.getTime());
const isEmptySet = value => value instanceof Set && value.size === 0;
const isEmptyMap = value => value instanceof Map && value.size === 0;

isInvalidDate(new Date('hello')); 
isEmptySet(new Set()); 
isEmptyMap(new Map()); 

En rassemblant tout cela, nous pouvons enfin mettre en place nos isBlank méthode.

const isFalsy = value => !value;
const isWhitespaceString = value =>
  typeof value === 'string' && /^\s*$/.test(value);
const isEmptyCollection = value =>
  (Array.isArray(value) || value === Object(value)) &&
  !Object.keys(value).length;
const isInvalidDate = value =>
  value instanceof Date && Number.isNaN(value.getTime());
const isEmptySet = value => value instanceof Set && value.size === 0;
const isEmptyMap = value => value instanceof Map && value.size === 0;

const isBlank = value => {
  if (isFalsy(value)) return true;
  if (isWhitespaceString(value)) return true;
  if (isEmptyCollection(value)) return true;
  if (isInvalidDate(value)) return true;
  if (isEmptySet(value)) return true;
  if (isEmptyMap(value)) return true;
  return false;
};

isBlank(null); 
isBlank(undefined); 
isBlank(0); 
isBlank(false); 
isBlank(''); 
isBlank(' \r\n '); 
isBlank(NaN); 
isBlank([]); 
isBlank({}); 
isBlank(new Date('hello')); 
isBlank(new Set()); 
isBlank(new Map()); 

Laisser un commentaire