哪种检查变量是否已初始化的方法更好/正确?(假设变量可以保存任何内容(字符串、int、对象、函数等))

if (elem) { // or !elem

or

if (typeof elem !== 'undefined') {

or

if (elem != null) {

当前回答

为了检查变量是否已被声明/设置,我使用了这个肮脏的技巧。

即使使用eval,我也没有找到将代码提取到函数的方法。点击下面的评论,了解原因。

"use strict";

// var someVar;

var declared;
try {
  someVar;
  declared = true;
} catch(e) {
  declared = false;
}

if (declared) {
  console.log("someVar is declared; now has the value: " + someVar);
} else {
  console.log("someVar is not declared");
}

其他回答

在ReactJS中,事情有点复杂!这是因为它是一个编译环境,遵循ESLint的无undef规则,因为react-scripts@2.0.3(2018年10月1日发布)。这里的文档对任何对此问题感兴趣的人都有帮助。。。

在JavaScript中,在ES6之前,变量和函数声明被提升到作用域的顶部,因此可以在代码中的正式声明之前使用标识符。。。。当ES6的[新]规则遇到对尚未声明的标识符的引用时,将发出警告。

因此,虽然有可能有一个未定义(或“未初始化”)的变量,但在ReactJS中有一个没有关闭esint规则的未声明变量是不可能的。

这可能非常令人沮丧——GitHub上有太多的项目只是利用了ES6之前的标准;并且在没有任何调整的情况下直接编译这些基本上是不可能的。

但是,对于ReactJS,可以使用eval()。如果你有一个未声明的变量,比如。。。

if(undeclaredvar) {...}

您可以简单地将此部分重写为。。。

if(eval('typeof undeclaredvar !== "undefined"')) {...}

例如。。。

if(eval(“false”)){console.log(“否!”);}if(eval(“true”)){console.log(“是!”);}

对于那些将GitHub存储库导入ReactJS项目的人来说,这只是检查是否声明了变量的唯一方法。在结束之前,我想提醒您,如果使用错误,eval()存在安全问题。

为了有助于辩论,如果我知道变量应该是字符串或对象,我总是喜欢if(!variable),所以检查它是否是假的。这可以带来更干净的代码,例如:

if(数据类型!==“undefined”&&数据类型。url===“未定义”){var message='接收响应时出错';if(typeof data.error!==“undefined”){message=数据错误;}否则如果(数据类型.消息!==“未定义”){message=数据消息;}警报(消息);}

..可以简化为:

if(data&&!data.url){var message=data.error | | data.message | |'接收响应时出错';警报(消息)}

为了检查变量是否已被声明/设置,我使用了这个肮脏的技巧。

即使使用eval,我也没有找到将代码提取到函数的方法。点击下面的评论,了解原因。

"use strict";

// var someVar;

var declared;
try {
  someVar;
  declared = true;
} catch(e) {
  declared = false;
}

if (declared) {
  console.log("someVar is declared; now has the value: " + someVar);
} else {
  console.log("someVar is not declared");
}
if (typeof console != "undefined") {    
   ...
}

或者更好

if ((typeof console == "object") && (typeof console.profile == "function")) {    
   console.profile(f.constructor);    
}

适用于所有浏览器

typeof运算符将检查变量是否真的未定义。

if (typeof variable === 'undefined') {
    // variable is undefined
}

与其他运算符不同,typeof运算符在与未声明的变量一起使用时不会引发ReferenceError异常。

但是,请注意,typeof null将返回“object”。我们必须小心避免将变量初始化为null的错误。为了安全起见,我们可以使用以下方法:

if (typeof variable === 'undefined' || variable === null) {
    // variable is undefined or null
}

有关使用严格比较==而不是简单相等==的更多信息,请参阅:JavaScript比较中应该使用哪个相等运算符(==vs==)?