Почему метод inject() всегда логает в консоль ScssItd, причем даже если тега inject не сущ-ет

class InjectIo{
  injections =0;
  constructor(){
    
  }
  inject(){
    let inj=document.getElementsByTagName('inject')
    if(inj){
      console.log("ScssItd")
    }else{
      throw new Error('Injection failure')
    }
  }
}
let inj=new InjectIo()
inj.inject()

Ответы (1 шт):

Автор решения: yar85

Потому что оператор if автоматически приводит указанное в нем выражение к типу boolean, а метод getElementsByTagName возвращает массивоподобный объект типа HTMLCollection (который, как и любой другой объект кроме спецзначения null, является истинным значением - даже когда коллекция пуста).

Другими словами: потому что Boolean(любойОбъектКромеNull) === true, всегда.


Вместо проверки истинности значения if(inj), можно проверять длину коллекции: if (inj.length > 0) или просто if (inj.length).

→ Ссылка