如果语句运行,则为空字符串

If statement run if empty string

本文关键字:字符串 语句 运行 如果      更新时间:2023-09-26

如果我在控制台中执行此操作:

document.querySelectorAll('.error')

返回长度为 3 的对象。

如果任何属性值为空,则我不希望我的if语句运行:

在对此感到沮丧(我正在使用!= '')之后,互联网告诉我使用!== ""

下面是对象中属性的输出:

document.querySelectorAll('.error')[0]
""
document.querySelectorAll('.error')[1]
"some string"
document.querySelectorAll('.error')[2]
""

到目前为止,我对JS的陌生感可能从我的问题中可以看出来。检查空字符串以使用我所做的!==的"最佳"方法是吗?

<script>
var errorElems = document.querySelectorAll('.error');
for(i=0; i<errorElems.length; i++) {
    if(errorElems[i].textContent !== ""){
        dataLayer.push({
            "event": "errors",
            "eventCategory": "error messages",
            "eventAction": errorElems[i].id,
            "eventLabel": errorElems[i].textContent
            })
        };
    };

这似乎正在起作用。但是,如果这很重要,我是一个人在台式计算机上检查一个浏览器(Chrome)。

最完整的证据(但相当简单)意味着什么?!==最好的测试吗?

如果它是一个空字符串,!== ""是要走的路。如果它也可以未定义(就像选择 DOM 元素时经常发生的那样),那么您应该进行如下检查:

if (typeof string !== 'undefined' && string !== "") 

值被解析为false,如果你只是尝试

if (!errorElems[i].textContent) {
    ... // error handling code here
}

根据其规范,Node.textContent 属性可以返回一个 null 值,因此最好使用如下所示的内容对其进行测试:

var errorElems = document.querySelectorAll('.error'),
    errorElem;
for (i=0; i < errorElems.length; i++) {
    errorElemText = errorElems[i].textContent;
    if (typeof errorElemText === "string" && errorElemText !== "") {
        dataLayer.push({
            "event": "errors",
            "eventCategory": "error messages",
            "eventAction": errorElems[i].id,
            "eventLabel": errorElemText
        });
    }
}