如果我在控制台中这样做:
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)。
什么是最完整的证明(但相当直接)意味着这样做? !==
是最好的测试吗?
答案 0 :(得分:3)
如果它是一个空字符串,!== ""
是要走的路。如果它也可以是未定义的(因为选择DOM元素时可能会发生这种情况),那么你应该这样检查:
if (typeof string !== 'undefined' && string !== "")
答案 1 :(得分:1)
如果您尝试
,则将空值解析为falseif (!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
});
}
}