Why doesn't .includes() work with .classList?

后端 未结 2 952
走了就别回头了
走了就别回头了 2020-12-30 21:20

element.classList returns an array of classes, its my understanding .includes() is used with arrays, so I don\'t understand why this wont work, I k

2条回答
  •  有刺的猬
    2020-12-30 21:33

    Element.classList is a DOMTokenList object, though it prints an array-like in console. But if you try on Firefox, it'd return DOMTokenList["main-nav"]

    And, includes is a method of Array instead of DOMTokenList.

    Which is why it's expected to encounter li.classList.includes is not a function in your case.

    You can use ES2015 spread operator to cast it to be an array.

    [...li.classList].includes('main-nav')
    

    Or alternatively, you can use DOMTokenList.contains method.

    li.classList.contains('main-nav')
    

    Why is it declared as includes instead of has or contains? (thanks to @akinuri)

    Quoting from the proposal

    The web has classes like DOMStringList and DOMTokenList which are array-like, and have methods named contains with the same semantics as our includes. Unfortunately, meshing with those is not web-compatible.

提交回复
热议问题