6

I'm looking for the javascript equivalent of the php function isset(). I've tried the method described here at JavaScript isset() equivalent but at firebug, error comes up saying

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

And in some cases

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

The logic seems to work but I'm wondering why is there an error then??

Basically, I want to check whether data.del[0].node or data.storyLine isset or not??

7
  • or you can use hasOwnProperty Commented Mar 25, 2011 at 19:12
  • please elaborate on what conditions will return a result of true for isset(), specifically: NaN and undefined Commented Mar 25, 2011 at 19:23
  • @zzzzBov, it's jst i make a msql query, if data are there, i return them, using json_encode of an array.. if data are not there, nothing is returned. Commented Mar 25, 2011 at 19:29
  • then use data.hasOwnProperty('foo'); Commented Mar 25, 2011 at 19:33
  • @Jared Farrish, I distinctly remember watching a lecture given by Douglas Crockford mentioning something about an issue with in but I believe it was in the context of a for...in loop. I believe in will work in most cases, but i'm more certain hasOwnProperty will work as expected. Commented Mar 25, 2011 at 19:44

3 Answers 3

11

isset() makes two checks: first if the variable is defined, and second if it is null.

You will have to check for both the 'undefined' case and the null case, for example:

if (typeof data !== 'undefined' && data !== null)
Sign up to request clarification or add additional context in comments.

Comments

5

ECMAScript defines the hasOwnProperty method for checking if an object has a property of a given name:

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

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

EDIT: This doesn't fully answer your question

It's possible for a property to be set as undefined

foo.bar = undefined;

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

The important question is: What do you need your truth table to be?

In php:

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

In 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

5 Comments

it's jst that, after making a mysql_query, if the data im seeking is in the database, im returning the data using json_encode() function of PHP. If the data is not there in the database, it's never returned. So I want to checked whether data did arrive from the database. If i got the data.. i do stuffs.. if i don't dont do stuffs.. that's like it.
it works... i've tried if(typeof data.node != 'undefined'), if(data.node != 'undefined' && data.node != 'null'), and data.hasProperty('node').. all of them seems to work.. but all of them throws up this red error in firebug so i'm just worried and wondering if it's working by luck!!
@zzzzBov - Oops, sorry, I moved the comment because I didn't know if you'd see it. Here's a test that I wasn't confident enough to post as an answer, which uses in: jsfiddle.net/ZRnda Note: No Firebugz errors! (FF 4, FB 1.7)
@ptamzz, i assume you forgot the typeof in your second example. They're all valid ways of checking if a property was set, the only difference between them will be the edge cases.
@Jared Farrish, in is a valid operation in JS, it won't throw an error, it just might behave unexpectedly in certain edge cases.
4

I think the best solution is to look in the source code of 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;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.