Пробел в первой строке - это код символа 160 (неразрывный пробел), а пробел во второй строке - код символа 32 (нормальный пробел), поэтому строки не равны друг другу.
console.log("item ".charCodeAt(4), "item ".charCodeAt(4));
Есть ли лучший подход для преобразования всех символов специального пробела в обычный пробел?.
Можно сопоставлять символы пробела, которые не вставьте символы табуляции или перевода строки и замените их обычным пробелом:
const makeSpacesNormal = str => str.replace(/(?=\s)[^\r\n\t]/g, ' ');
console.log(makeSpacesNormal("item ") === makeSpacesNormal("item "));
В частности, \s
будет соответствовать целому ряду символов, подобных пробелам :
[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]
и путем сопоставления и заменив их (кроме новых строк и вкладок, если хотите), у вас останутся обычные пробелы.