我遇到了这种奇怪的行为,我真的不明白为什么。
我有一个对字符串进行规范化的函数:
function normalize_for_find(name) {
return name
.trim()
.replace(/&/g, '&')
.replace(/ /g, ' ');
}如果我在chrome控制台中执行它,我会将" "转换成两个空格,这就是我想要的:
normalize_for_find("MONKEY BISCUITS 200g")
"MONKEY BISCUITS 200g"

但是当我在这个方法中使用它时,它以某种方式将" "转换为一个空间。
function find_by_name(elems, name) {
name = normalize_for_find(name);
return _.find(elems, function(e) {
return name === normalize_for_find(e.name);
});
}看一看这个调试:
name以"MONKEY BISCUITS 200g"身份启动

然后在调用normalize_for_find之后,它显示为"MONKEY BISCUITS 200g" (只有一个空格)

我需要两个空格,就像我从控制台执行的时候一样。
这里有更多关于观察每个变量的信息,这对我来说一点意义都没有!

发布于 2019-03-27 15:23:58
这两个字符串之间的不同之处在于,原始e.name包含一个“非中断空格”字符,它是ASCII码160,而normalize_for_find方法插入一个规则空格,它是ASCII码32。
正如另一位用户所建议的,这也可以通过将normalize方法更改为以下方法来修复:
function normalize_for_find(name) {
var parsed = jQuery.parseHTML(name);
if (!parsed || parsed.length == 0) return '';
return parsed[0].data.trim();
}(请注意,对于'',jQuery.parseHTML(name)将返回null )
https://stackoverflow.com/questions/55370464
复制相似问题