6 votes

équivalent de php isset() en javascript

Je cherche l'équivalent en javascript de la fonction php isset() . J'ai essayé la méthode décrite ici à Équivalent de isset() en JavaScript mais avec firebug, une erreur apparaît disant

data.del is undefined                          //Firebug warning/error
 if(typeof data.del[0].node != 'undefined') { // codes in my js file

Et dans certains cas

data is null                                  //Firebug warning/error
  if(typeof data.storyLine != 'undefined') { // codes in my js file

La logique semble fonctionner, mais je me demande pourquoi il y a une erreur à ce moment-là ?

En fait, je veux vérifier si data.del[0].node o data.storyLine isset ou non ??

11voto

Bobby D Points 1771

Isset() fait deux chèques : premièrement si la variable est définie, et deuxièmement si elle est nulle.

Vous devrez vérifier à la fois le cas "undefined" et le cas "null", par exemple :

if (typeof data !== 'undefined' && data !== null)

5voto

zzzzBov Points 62084

L'ECMAScript définit l'élément hasOwnProperty pour vérifier si un objet possède une propriété d'un nom donné :

var foo = {'bar':'bar'}

alert( foo.hasOwnProperty( 'bar' ) ); //true
alert( foo.hasOwnProperty( 'baz' ) ); //false

EDIT : Ceci ne répond pas entièrement à votre question

Il est possible qu'une propriété soit définie comme undefined

foo.bar = undefined;

alert( foo.hasOwnProperty( 'bar' ) ); //still true

La question importante est la suivante : à quoi doit ressembler votre table de vérité ?

En php :

type  | isset() | == true
------+---------+----------
null  | false   | false
false | true    | false
true  | true    | true
""    | true    | false
"a"   | true    | true
0     | true    | false
1     | true    | true

En JS :

type      | isset() | truthy
----------+---------+--------
NaN       | ?       | false
undefined | ?       | false
null      | false   | false
true      | true    | true
false     | true    | false
""        | true    | false
"a"       | true    | true
0         | true    | false
1         | true    | true

4voto

Harmen Points 11632

Je pense que la meilleure solution est de regarder dans le code source de php.js :

function isset () {
    // !No description available for isset. @php.js developers: Please update the function summary text file.
    // 
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/isset
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // +   improved by: Rafał Kukawski
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    var a = arguments,
        l = a.length,
        i = 0,
        undef;

    if (l === 0) {
        throw new Error('Empty isset');
    }

    while (i !== l) {
        if (a[i] === undef || a[i] === null) {
            return false;
        }
        i++;
    }
    return true;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X