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

时间:2014-12-24 16:58:02

标签: javascript

如果我在控制台中这样做:

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)。

什么是最完整的证明(但相当直接)意味着这样做? !==是最好的测试吗?

3 个答案:

答案 0 :(得分:3)

如果它是一个空字符串,!== ""是要走的路。如果它也可以是未定义的(因为选择DOM元素时可能会发生这种情况),那么你应该这样检查:

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

答案 1 :(得分:1)

如果您尝试

,则将空值解析为false
if (!errorElems[i].textContent) {
    ... // error handling code here
}

答案 2 :(得分:1)

Node.textContent属性,根据其specification可以返回一个空值,所以用这样的方法测试它会更好:

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
        });
    }
}