JavaScript isset 函数

发布于 2025-01-05 11:40:03 字数 413 浏览 0 评论 0原文

我创建了一个 isset 函数来检查变量是否已定义且不为空。 这是我的代码:

isset = function(a) {
    if ((typeof (a) === 'undefined') || (a === null))
        return false;
    else
        return true;
};
var a = [];

// Test 1
alert(isset(a['not']); // Alerts FALSE -> works OK
// Test 2
alert(isset(a['not']['existent'])); // Error: Cannot read property 'existent' of undefined

有什么建议可以让我的函数适用于测试 2? 谢谢。

I created an isset function to check if a variable is defined and not null.
Here's my code:

isset = function(a) {
    if ((typeof (a) === 'undefined') || (a === null))
        return false;
    else
        return true;
};
var a = [];

// Test 1
alert(isset(a['not']); // Alerts FALSE -> works OK
// Test 2
alert(isset(a['not']['existent'])); // Error: Cannot read property 'existent' of undefined

Any suggestion to make my function work for test 2?
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

箹锭⒈辈孓 2025-01-12 11:40:03

您正在尝试检查未定义对象的属性。这没有任何意义。你可以这样写:

alert(isset(a['not']) && isset(a['not']['existent']));

You are trying to check property of an undefined object. It doesn't make any sense. You could write like this:

alert(isset(a['not']) && isset(a['not']['existent']));
梓梦 2025-01-12 11:40:03

那是行不通的,你也不能让它行得通。
发生的事情是这样的:
js 引擎尝试评估 ['not'] 并得到“未定义”,然后尝试评估未定义的属性“存在”,然后您会收到该错误。
所有这些都发生在调用您的函数之前...

您可以做的是这样的:

var isset = function(obj, props) {
    if ((typeof (obj) === 'undefined') || (obj === null))
        return false;
    else if (props && props.length > 0)
        return isset(obj[props.shift()], props);
    else
        return true;
};

然后您像这样调用它:

var a = [];

// Test 1
alert(isset(a, ['not']);
// Test 2
alert(isset(a, ['not', 'existent']));

(**这只是一个伪代码,您可能需要修改它实际工作一点)

that won't work, and you can't make it work.
what happens is this:
the js engine tries to evaluate a['not'] and get's "undefined", then it tries to evaluate the property 'existent' of the undefined and you get that error.
all of that happens before the call to your function...

what you can do is something like:

var isset = function(obj, props) {
    if ((typeof (obj) === 'undefined') || (obj === null))
        return false;
    else if (props && props.length > 0)
        return isset(obj[props.shift()], props);
    else
        return true;
};

then you call it like this:

var a = [];

// Test 1
alert(isset(a, ['not']);
// Test 2
alert(isset(a, ['not', 'existent']));

(**this just a pseudo code, you might need to modify it a bit to actually work)

怪我入戏太深 2025-01-12 11:40:03

测试 2 将不起作用,因为“a['not']['existent']”值解析先于“isset”函数调用,并导致运行时错误。

Test 2 will not work because "a['not']['existent']" value resolution precedes "isset" function call, and results in a runtime error.

硬不硬你别怂 2025-01-12 11:40:03

好吧,你可以这样做:

1)就像我们在 php 中所做的那样:

$vara = "abc";
$a =0;

 while(isset($vara[a]){
a++;
} 

2)就像我在 javascript 中所做的那样:

vara = "abc";
 while (vara[a] != null){
a++;
}

Well, You can do right this:

1) as we do in php:

$vara = "abc";
$a =0;

 while(isset($vara[a]){
a++;
} 

2) as I do in javascript:

vara = "abc";
 while (vara[a] != null){
a++;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文