Javascript: 将未定义的变量传递给函数

Javascript: passing a not defined variable to a function

我有一些对 AJAX 的调用,其中我 return 一个 JSON 对象作为响应。此 JSON 对象始终具有相同的结构。但是,有时如果 PHP 脚本失败,JSON 结构的某些对象未定义甚至不存在。

这也发生在页面中存在的一些 "global" 变量上,我在一些 JS 文件中使用,但随后转到另一个页面,在那里我使用了这些 JS 文件,甚至没有写入变量。

所以,我想创建一个函数 is_defined(),我可以向它询问是否定义了一个变量。函数如下:

function is_defined(ob, can_empty){
    if(can_empty === undefined || can_empty == '') can_empty = false

    return ob !== undefined && ob !== null && (ob !== '' || can_empty)
}

所以,如果传递的变量是NULLundefined,或者是空的(而且不能为空),我returnfalse.

当甚至没有写入变量时,我的问题就来了,因为我无法将它传递给函数,因为引发了 Uncaught ReferenceError: obj is not defined error

所以我的问题是是否有任何方法可以创建一个函数来检查变量是否存在并且已定义,因为我我想将所有这些检查集中到一个函数中,而不是不时地在我的代码中编写 obj !== undefined || obj !== null

我以为使用双 Not 运算符 (!!!obj) 会转换为 false,但如果不写入变量,我会遇到同样的问题。

编辑: 正如声明一样,这里的问题是能够检查函数内未声明和未定义的变量,因此我可以将变量传递给函数而无需在调用它之前检查它是否声明了变量。

感谢大家的宝贵时间和回答!

亲切的问候!

您可以使用 typeof variableName === 'undefined' 来测试变量是否被声明。

具体来说:

  • typeof variable === 'undefined' 测试变量是否被声明。
  • variable === undefined 测试声明的变量是否定义或赋值。

检查现有变量的万无一失的方法:

typeof variableName === 'undefined'

[...] is there any way to create a function to check if a variable exists and is defined [...]

不,没有。当您将变量传递给函数时,它总是会尝试解析该变量。如果未声明,将引发引用错误。

Relevant section from the ECMAScript specification.

在将变量传递给函数之前,您必须检查变量是否通过typeof声明。