我正在寻找与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].node
或data.storyLine
?
答案 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