如何在JavaScript中检查变量是否为空?

4
var characterName = document.getElementById("pilotName").value;
var characterID = 0;
var charSecStatus = 0;
var corpName = " ";
var allianceName = " ";


//callback
makeRequest('https://api.eveonline.com/eve/CharacterID.xml.aspx?names=' + characterName, function() {
  if (xmlhttp.status == OK_RESPONSE) {

    //read character info
    characterID = xmlhttp.responseXML.getElementsByTagName("row")[0].getAttribute("characterID");

    makeRequest('https://api.eveonline.com/eve/CharacterInfo.xml.aspx?characterID=' + characterID, function() {

      if (xmlhttp.status == OK_RESPONSE) {

        //read character info 
        characterID = xmlhttp.responseXML.getElementsByTagName("characterID")[0].innerHTML;
        charSecStatus = xmlhttp.responseXML.getElementsByTagName("securityStatus")[0].innerHTML;
        corpName = xmlhttp.responseXML.getElementsByTagName("corporation")[0].innerHTML;
        allianceName = (xmlhttp.responseXML.getElementsByTagName("alliance")[0] || {
          innerHTML: ""
        }).innerHTML;
      }
    });
  }
});

(部分代码如图所示,不要加括号) 我正在尝试检查“alliance”变量是否为空,因为某些“公司”不在“联盟”中,如果尝试显示一个空变量,这将是网站的关键错误。那么,在从XML树中检索并设置allianceName后,是否有一种方法来检查是否为空并将其设置为“无联盟”?谢谢。


1
可能是如何在JavaScript中检查空字符串?的重复。 - PM 77-1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Richard Hamilton
@RichardHamilton 所以我需要将它初始化为 var allianceName = "" 吗? - timoxazero
是的,在JavaScript中这是一个常见的错误。 - Richard Hamilton
@timoxazero,你根本不需要初始化它,只需声明它,它将被赋予一个值为undefined的假值。 - RobG
4个回答

3
这里声明了真正的变量。
var corpName = " ";
var allianceName = " "

在JavaScript中,带有空格字符的字符串的值实际上是真值。虽然上述值看起来为空,但实际上并非如此。您可以自行尝试一下。
Boolean(" ");
=> true

要将这些变量设置为空,您需要在声明时不包含空格字符。

var corpName = "";
var allianceName = "";

在获取了这个变量之后,有两种方法可以检查变量是否为空

if (!corpName || !corpName.length)

假设您意外地包含了空格字符,有几种方法可以修复此问题。在这些情况下,我们可以修改这些字符串。

Boolean(" ".trim());
=> false

在上面的例子中,trim() 函数被用来从字符串中删除空格字符。
你也可以在字符串中搜索非空格字符。
/\S/.test(" ")
=> false
< p > \S修改器可以找到所有非空格字符。< /p > < p >或者,您也可以使用replace函数。< /p >
Boolean(" ".replace(/\s/g, ''));

全局标志g会查找前面正则表达式的所有引用。

或许有点迂腐,但 trim 只会移除字符串开头和结尾的空格,而 空白字符(或 WhiteSpace 的成员有7个,不仅仅是空格字符。无论如何,这篇文章值得点赞。 :-) - RobG
对于检查字符串是否为空,以下方法对我来说效果更好:Boolean(" ".trim()) - csalmeida

0

如果你只是想检查一个变量是否有值,那么可以尝试这样做:

if (str) {
    //do something
}

或者,

//when undefined
if (typeof str == 'undefined'){
//do something
}

如果您需要特别检查空字符串而不是null,则可以尝试以下方法。
//when defined, but empty
if ((str.length == 0)||(str== ""))
{
//do something
}

0
你可以尝试这样做:
注意:如果你的值是 null 或 undefined,!value?true:false 应该可以工作。同时,value.length 也是一个好方法,但应该在字符串的情况下使用。如果值是数字,value.length 将返回 0,即用于检查空值的 true。

function isEmpty(value) {
  switch (typeof(value)) {
    case "string": return (value.length === 0);
    case "number":
    case "boolean": return false;
    case "undefined": return true;
    case "object": return !value ? true : false; // handling for null.
    default: return !value ? true : false
  }
}

var a = " ";
console.log(a, "is empty:", isEmpty(a))
console.log(a, "is empty:", isEmpty(a.trim()))

a = 0;
console.log(a, "is empty:", isEmpty(a))

a = undefined;
console.log(a, "is empty:", isEmpty(a))

a = null;
console.log(a, "is empty:", isEmpty(a))

另外,您可以更改

allianceName = (xmlhttp.responseXML.getElementsByTagName("alliance")[0] || {
   innerHTML: "
}).innerHTML;

allianceName = xmlhttp.responseXML.getElementsByTagName("alliance")[0].innerHTML || "";

-1
我相信在JavaScript中有一个名为isset()的函数,它接受一个参数并返回true(如果已设置为某个值)或false(如果未设置)。

1
现实情况并非如此...所有声明的JavaScript变量都被初始化为undefined,因此它们始终具有值,无论是否分配了值。;-) - RobG
哦,没错。我同时学习了两种语言,所以有时它们会混在一起。 - Zackeezy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接