如何在Javascript中检查空值?

16

我正在研究一种从表单中检索隐藏输入框数组的方法,如下所示:

<input type="hidden" value="12:34:00" name="timetemp0">
<input type="hidden" value="14:45:00" name="timetemp1">
<input type="hidden" value="15:12:00" name="timetemp2">
<input type="hidden" value="16:42:12" name="timetemp3">
<input type="hidden" value="16:54:56" name="timetemp4">
<input type="hidden" value="17:03:10" name="timetemp5">

我的JavaScript函数通过使用getElementsByName('timetemp'+i)逐个检索它们。

    for (i ; i < counter[0].value; i++)
        {
//finds hidden element by using concatenation of base name plus counter

var timetemp = document.getElementsByName('timetemp'+i);

//if there is a value alert that value to user - this is just for testing purposes at the moment
//because there is only one of timetemp.i then it occupies position 0 in array
            if (timetemp[0].value == null)
            {
                alert ('No value');

            }
            else
            {
                alert (timetemp[0].value);

            }
}

所应该发生的是它会警告用户该隐藏输入框中的值,但如果遇到没有值的输入框,如下所示:

<input type="hidden" value="" name="timetemp16">

然后它会显示“没有值”。

但是if语句似乎无法处理这种情况:

我尝试过:

  1. (timetemp[0].value == null)
  2. (timetemp[0].value === null)
  3. (timetemp[0].value == undefined)
  4. (timetemp[0].value == '')

它总是似乎默认了else子句。

有什么想法吗?


尝试使用以下代码:if (timetime[0].value) - Richard Dalton
1
这个页面https://dev59.com/uXVC5IYBdhLWcg3w4Vb6可能有所帮助 - Im0rtality
@Richard D,你的解决方案完美地解决了我的问题!我希望我能给你积分,你可以回答我的问题吗?我会接受你的答案。 - sqlmole
非常奇怪,当您执行.value == ''操作时,代码无法工作。这是您的代码,只需将计数器替换为一个固定数字即可。它可以正常工作。 - user113716
6个回答

42

以评论的形式回答:

if (timetime[0].value)

这段代码有效是因为 JavaScript 中的任何变量都可以作为布尔值进行评估,因此通常会捕获空值、null或未定义的变量。


6

在我看来,使用"if(value)"判断一个值是否为空并不严谨,因为当v的值为0时(0不是空值),"v?true:false"的结果为false。您可以使用以下函数:

const isEmptyValue = (value) => {
    if (value === '' || value === null || value === undefined) {
        return true
    } else {
        return false
    }
}

3
首先,我会检查 i 的初始化值,以确定通过 getElementsByName 返回的元素是否符合预期。可以尝试使用硬编码名称,如 timetemp0,而不进行连接来分解问题。您还可以通过浏览器调试器(FireBugChrome Dev ToolsIE Dev Tools)运行代码。

另外,在您的 if 条件中,以下内容应该足够:

if (!timetemp[0].value) {
    // The value is empty.
}
else {
    // The value is not empty.
}

在Javascript中,空字符串是一个falsey值,因此对其进行逻辑取反将使您进入if-block。

1

你的脚本在几个地方似乎有误。

试试这个

var timetemp = document.getElementsByTagName('input');

for (var i = 0; i < timetemp.length; i++){
    if (timetemp[i].value == ""){
        alert ('No value');
    }
    else{
        alert (timetemp[i].value);
    }
}

示例:http://jsfiddle.net/jasongennaro/FSzT2/

这是我所做的更改:

  1. 通过使用 TagName 获取所有的 input,从而创建一个数组。
  2. 使用 var 初始化 i,然后使用 timetemp.length 属性循环遍历 timetemp 数组。
  3. 使用 timetemp[i] 引用每个 inputfor statement 中。

2
你错了,为什么我要找到所有的输入?我的表单中有超过50个输入,我只想找到timetemp0、timetemp1、timetemp2——这并不适用于此! - sqlmole
1
好的,@sqlmole。但没必要大喊大叫。我只是想帮助你。我根据你的问题回答了你,而你的问题并没有提到其他输入。 - Jason Gennaro
对于其他元素/属性,当 .length 为空时会出现错误。我最终修改它变成这样: return (${jsElement} && ${jsElement}.length > 0) - MarkHu

0

你的for循环中的计数器似乎不正确(或者我们缺少一些代码)。这是一个可用的Fiddle示例

以下是代码:

//Where is counter[0] initialized?
for (i ; i < counter[0].value; i++)

应该被替换为:

var timeTempCount = 5; //I'm not sure where you're getting this value so I set it.

for (var i = 0; i <= timeTempCount; i++)

你怎么知道 OP 需要验证 XHTML?/> 不是绝对必需的。 - user113716
我正在使用HTML5,但谢谢你提供的代码示例,以防将来我使用XHTML 1.1。 - sqlmole

0

这里有一个一行代码,用于检查数组中是否存在任何值(在这种情况下为 null、undefined、'')

const isEmptyValue = val => [null, undefined, ''].includes(val);

1
在StackOverflow上,仅提供代码的答案是不被鼓励的。请同时解释代码的作用。 - ascripter

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