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, e
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)
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;
}
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