当我将一个空字符串传递给include(“”)时,它将始终返回true吗?

时间:2018-07-30 14:25:45

标签: javascript methods

因此,我正在测试JS include()方法,因此创建了一个搜索输入字段,可以在其中搜索通过实时重新渲染创建的注释。现在我的问题是: 当我完全不传递任何搜索文本时,将显示所有注释,但是当我输入字符或单词时,注释将立即被过滤。 示例代码:

const filters = {
  searchText: ''
}

// Render application notes
const renderNotes = (notes, filters) => {
  const filteredNotes = notes.filter((note) => {

    return note.title.toLowerCase().includes(filters.searchText.toLowerCase())
  })
  document.querySelector('#notes').innerHTML = ''

  filteredNotes.forEach((note) => {
    const noteEl = generateNoteDOM(note)
    document.querySelector('#notes').appendChild(noteEl)
  })
}

据此我了解到,在这种情况下总是返回true。 希望对此主题进行任何澄清!

谢谢!

1 个答案:

答案 0 :(得分:4)

.includes()函数必须与.indexOf()的功能相匹配以保持一致性,而.indexOf()总是与任何目标字符串中的空字符串匹配。 From MDN

  

空字符串searchValue将在0到str.length之间的任何索引处匹配。

这是违反直觉的,但是请考虑以下问题:

var str = "something";
console.log(str.includes("")); // Imagine this returns false ...
str += "";
console.log(str.includes("")); // !!