php isset()在javascript中等效

时间:2011-03-25 19:04:44

标签: javascript

我正在寻找与PHP函数isset()相当的javascript。我已经在JavaScript isset() equivalent尝试了这里描述的方法,但在firebug中,出现了错误

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

在某些情况下

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

逻辑似乎有效,但我想知道为什么会出现错误?

基本上,我想检查是否设置data.del[0].nodedata.storyLine

3 个答案:

答案 0 :(得分:10)

isset()使two checks:首先定义变量,第二个定义为空。

您必须检查'undefined'大小写和null大小写,例如:

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

答案 1 :(得分:4)

我认为最好的解决方案是查看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;
}

答案 2 :(得分:4)

ECMAScript定义hasOwnProperty方法,用于检查对象是否具有给定名称的属性:

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

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

编辑:这不能完全回答你的问题

可以将属性设置为undefined

foo.bar = undefined;

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

重要的问题是:你需要什么样的真值表?

在php中:

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

在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