javascript未定义节点列表返回true

javascript未定义节点列表返回true,javascript,html,css,Javascript,Html,Css,我有两套沙发。第一个集合被分配了classnametD,而另一个集合有一个classtUtD/tU可能未定义。在tU未定义的情况下,tD!==null在chrome中返回true。它实际上返回[]。为什么会这样 var tD = document.getElementsByClassName("t-d"); // undefined var tDLength = tD.length; var tU = document.getElementsByClassName("tU"); //define

我有两套沙发。第一个集合被分配了classname
tD
,而另一个集合有一个class
tU
tD
/
tU
可能未定义。在
tU
未定义的情况下,
tD!==null
在chrome中返回true。它实际上返回[]。为什么会这样

var tD = document.getElementsByClassName("t-d"); // undefined
var tDLength = tD.length;
var tU = document.getElementsByClassName("tU"); //defined
var tULength = tU.length;

while (tU !== null && triangle_up_length > 0) {
        tU[tULength - 1].style.borderLeftWidth = 128 + "px";
        tU[tULength - 1].style.borderRightWidth = 128 + "px";
        tULength--;
}
while (tD !== null && triangle_down_length > 0) {
    tD[tDLength - 1].style.borderLeftWidth = 128 + "px";
    tD[tDLength - 1].style.borderRightWidth = 128 + "px";
    tULength--;
}
重新编辑:

if( tU ) {
   if( tU.length > 0 ) {
      //do the stuff
   }
{

这是GetElementByClassName的标准行为

“。返回具有所有给定类名的所有子元素的类似数组的对象…”。那你必须检查一下

 if( tD.length != 0 ){}  
while(tU.length>0)
将执行您想要的操作


document.getElementsByClassName
如果找不到任何内容,则返回一个空节点列表(几乎是数组),因此不应检查
null

那么我该如何检查节点列表的存在?您应该替换
tU!==空
by simply
tU
顺便说一下,您应该重构代码以避免重复;)@Mik378你认为哪里有重复的代码?两者都非常相似。它们的区别在于
tU/tD
triangle\u up\u length
/
triangle\u down\u length
。你可以(应该)产生一个通用函数。您可以删除这些变量:
var tDLength
/
var tULength
。在这种情况下,临时变量是无用和丑陋的。您甚至可以在代码段中删除所有临时变量。
if(tU)
就足够了。在这个示例中最好使用
if(tU&&tU.length>0)
case@user3633561在这种情况下不需要此双运算符:
!!tU
user3633561读取@dentuzhik的解决方案返回一个空数组=>那么为什么不:
while(tU.length>0)
。这就足够了。这就是为什么它返回[]?@user3633561,因为在发布此类问题之前,请阅读文档。Nodelist是一个类似数组的对象,它没有数组原型的方法,但有长度。那么,在空Nodelist上检查长度不会导致错误?@mik378哪本教科书是你的web开发者配套JavaScript第三版(wrox)?