IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tester type de variable


Sujet :

JavaScript

  1. #1
    Membre �clair�
    Inscrit en
    Octobre 2007
    Messages
    401
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par d�faut Tester type de variable
    Bonjour,

    J'ai cr�e une fonction ayant l'objectif de tester le type d'une variable.

    Cependant le r�sultat n'est pas celui que je pensais obtenir. La fonction me retourne toujours que la variable est de type String. Cependant ce n'ai pas toujours le cas.

    Voici ma fonction:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function processRow(rowData) {
    	console.log("######");
    	var rowStructure = [];
    	var rowIndex = 0;
    	for(d in rowData) {
    		var v = rowData[rowIndex].trim();
    		if(typeof v=="string") 
    			console.log(v + " is a String");
    		else if(typeof v=="number")
    			console.log(v + " is a number"); 
    		else
    			console.log(v + " is ?");
     
    		//console.log(rowData[rowIndex]);
    		rowIndex++;  
    	}
    	return rowStructure;
    }
    Voici mon output:


    ######
    Title is a String
    Description is a String
    Year is a String
    ######
    Braveheart is a String
    A great movie is a String
    1995 is a String -------------> �a devrait �tre d�tect� comme �tant un numeric
    ######
    Django is a String
    Best 2013 movie is a String
    2013 is a String -------------> �a devrait �tre d�tect� comme �tant un numeric
    Je pense que c'est un probl�me simple mais voici des ann�es que je programme pas en Web et plus pr�cis�ment en JS.

    Merci

  2. #2
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    D�j�, je ne vois pas trop comment tu esp�res que ta fonction marche avec autre chose que des chaines �tant donn� que dans
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var v = rowData[rowIndex].trim();
    trim() est soit non impl�ment�, soit applicable uniquement � des chaines. Donc tu risque difficilement d'aller plus loin...

    Ensuite, tu l'appelle avec quoi ta fonction ? Parce que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function processRow(rowData) {
    	console.log("######");
    	var rowStructure = [];
    	var rowIndex = 0;
    	for(d in rowData) {
    		var v = rowData[rowIndex];
    		if(typeof v=="string") 
    			console.log(v + " is a String");
    		else if(typeof v=="number")
    			console.log(v + " is a number"); 
    		else
    			console.log(v + " is ?");
     
    		//console.log(rowData[rowIndex]);
    		rowIndex++;  
    	}
    	return rowStructure;
    }
    processRow(['foo', 42])
    Renvoie bien
    ######
    foo is a String
    42 is a number
    []
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  3. #3
    Membre �clair�
    Inscrit en
    Octobre 2007
    Messages
    401
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Par d�faut
    Bonjour,

    Merci pour la r�ponse.

    Le param�tre que ma fonction re�oit est un array de String.

    Dans mon cas concret, la fonction est appell�e 3 fois avec les param�tres suivants:
    ["Title", "Description", "Year"]
    ["Braveheart", " A great movie", " 1995"]
    ["Django", " Best 2013 movie", " 2013"]


    Avec la fonction, mon objectif serait de d�tecter que l'�l�ment "Braveheart" est bien une string mais que par contre l'�l�ment " 1995" est un num�rique.
    En java j'avais d�j� fais cela avec une fonction comme celle ci:

    Code java : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public static boolean isNumeric(final String str) {  
    	  try {
    		  Double.parseDouble(str);
    		  return true;
     
    	  } catch(NumberFormatException nfe) {  
    		  try {
    			  Integer.parseInt(str.substring(0, str.length()-1));
    			  return true;
    		  } catch(NumberFormatException nfee) {
    			  try {
    				  Float.parseFloat(str.substring(0, str.length()-1));
    				  return true;
    			  } catch(NumberFormatException nfeee) {
    				  return false;
    			  }
    		  }
     
    	  }  
    	}

    Renvoie bien
    ######
    foo is a String
    42 is a number
    []
    OK MAIS:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    processRow(["foo", "42"])
    renvoi foo is a String
    42 is a String

  4. #4
    R�dacteur/Mod�rateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par d�faut
    Le test de type n'est pas un des plus grands succ�s de JavaScript typeof et instanceof ont tous les deux leurs d�fauts.

    Voil� une fonction similaire � ce que fait jQuery.type :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    function type(val){ 
       return Object.prototype.toString.call(val).replace(/^\[object (.+)\]$/,"$1").toLowerCase();
    }

  5. #5
    R�dacteur

    Avatar de Bovino
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    Le param�tre que ma fonction re�oit est un array de String.
    Ben faut pas s'�tonner qu'il t'indique que ce sont des chaines si tu lui passes des chaines !

    Tu peux en revanche cr�er une fonction qui v�rifie si une chaine est au format num�rique :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function is_numeric(st){
      return +st == st;
    }
    console.log(is_numeric('foo42'));
    console.log(is_numeric('42bar'));
    console.log(is_numeric('25'));
    console.log(is_numeric('  42  '));
    console.log(is_numeric(42));
    console.log(is_numeric(25.8));
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  6. #6
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par d�faut
    pour info, mon impl�mentation de is_numericet is_integer :

    is_numeric :
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function isNumber(n) {
      n = n.toString().replace(/,/g, '.'); // en chaine, puis convertir , en .  
      return !isNaN(parseFloat(n)) && isFinite(n);
    }
     
    console.log(isNumber(5)); // true
    console.log(isNumber(4597)); // true
    console.log(isNumber("lol")); // false
    console.log(isNumber("9.489.")); // false
    console.log(isNumber("9.489")); // true
    console.log(isNumber("4579,312")); // true
    console.log(isNumber("4,579,312")); // false
    console.log(isNumber("5,2")); // true
    console.log(isNumber("8e3")); // true
    console.log(isNumber(",5")); // true
    console.log(isNumber(".5")); // true

    isInteger :
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    /*\
    |*|
    |*|  :: Number.my_isSafeInteger() polyfill ::
    |*|
    |*|  <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/my_isSafeInteger" target="_blank">https://developer.mozilla.org/en-US/..._isSafeInteger</a>
    |*|
    \*/
     
    // Note, the MDN polyfill is actually isSafeInteger polyfill
    function my_isSafeInteger(n) {
      return typeof n === "number" && isFinite(n) && n >= (Number.MIN_SAFE_INTEGER || -9007199254740991) && n <= (Number.MAX_SAFE_INTEGER || 9007199254740992) && Math.floor(n) === n;
    }
    // [ES6 proposal](<a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger" target="_blank">https://people.mozilla.org/~jorendor....issafeinteger</a>) 
    // already in Chrome 34+ : [Number.isSafeInteger](<a href="https://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/v8natives.js?r=18480#1655" target="_blank">https://code.google.com/p/v8/source/...s?r=18480#1655</a>)
     
    /* These tests must be valid */
    // Integers
    console.assert(my_isSafeInteger(4597));
    console.assert(my_isSafeInteger(8e3));
    console.assert(my_isSafeInteger(-0));
    console.assert(my_isSafeInteger(+0));
     
    // !my_isSafeInteger
    console.assert(!my_isSafeInteger("4598"));
    console.assert(!my_isSafeInteger(Number.MAX_VALUE));
    console.assert(!my_isSafeInteger(Infinity));
    console.assert(!my_isSafeInteger(NaN));
    console.assert(!my_isSafeInteger({}));
    console.assert(!my_isSafeInteger(false));
    console.assert(!my_isSafeInteger(true));
    console.assert(!my_isSafeInteger(null));
    console.assert(!my_isSafeInteger(undefined));
    console.assert(!my_isSafeInteger("lol"));
    console.assert(!my_isSafeInteger("9.489"));
    console.assert(!my_isSafeInteger("4,579,312"));
    console.assert(!my_isSafeInteger("5,2"));
    console.assert(!my_isSafeInteger("8e3"));
    console.assert(!my_isSafeInteger(".5"));
     
    // my isInteger implementation
    function my_isInteger(n) {
      return typeof n === "number" && isFinite(n) && Math.floor(n) === n;
    }
    // [ES6 proposal](<a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger" target="_blank">https://people.mozilla.org/~jorendor...mber.isinteger</a>) 
    // already in Chrome 34+ : [Number.isInteger](<a href="https://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/v8natives.js?r=18480#1642" target="_blank">https://code.google.com/p/v8/source/...s?r=18480#1642</a>)
     
    /* These tests must be valid */
    // Integers
    console.assert(my_isInteger(4597));
    console.assert(my_isInteger(8e3));
    console.assert(my_isInteger(Number.MAX_VALUE));
    console.assert(my_isInteger(-0));
    console.assert(my_isInteger(+0));
     
    // !my_isInteger
    console.assert(!my_isInteger("4598"));
    console.assert(!my_isInteger(Infinity));
    console.assert(!my_isInteger(NaN));
    console.assert(!my_isInteger({}));
    console.assert(!my_isInteger(false));
    console.assert(!my_isInteger(true));
    console.assert(!my_isInteger(null));
    console.assert(!my_isInteger(undefined));
    console.assert(!my_isInteger("lol"));
    console.assert(!my_isInteger("9.489"));
    console.assert(!my_isInteger("4,579,312"));
    console.assert(!my_isInteger("5,2"));
    console.assert(!my_isInteger("8e3"));
    console.assert(!my_isInteger(".5"));

Discussions similaires

  1. [XL-2007] Tester le type de variable de colonnes
    Par Craquos dans le forum Macros et VBA Excel
    R�ponses: 5
    Dernier message: 27/11/2014, 17h37
  2. tester le type de variable
    Par moooona dans le forum C++
    R�ponses: 7
    Dernier message: 14/03/2010, 22h04
  3. comment tester si une variable est de type indifined
    Par amelhog dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 10/08/2005, 09h32
  4. Comparer les types de variable
    Par onipif dans le forum ASP
    R�ponses: 11
    Dernier message: 27/05/2004, 18h07
  5. Types de variables entre mysql/php et flash
    Par ramses83 dans le forum Flash
    R�ponses: 2
    Dernier message: 06/10/2003, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo