Javascript 非空字符串.charAt(0)如何返回空字符串?
我真的被这件事弄糊涂了。。。难以置信的是,我发布了Chrome调试器的屏幕截图: 我在一个测试中快速编写了这个函数,以比较2个base64编码字符串(Javascript 非空字符串.charAt(0)如何返回空字符串?,javascript,string,charat,Javascript,String,Charat,我真的被这件事弄糊涂了。。。难以置信的是,我发布了Chrome调试器的屏幕截图: 我在一个测试中快速编写了这个函数,以比较2个base64编码字符串(a可能比b短)。 但是,它总是返回0,好像第一个字符不同。 事实上,它们是:字符串a的第一个字符ca是正确的,但是由于某种神秘的原因,字符串b的第一个cb是空的!!!字符串b看起来正确,长度正确(685个字符),类型正确typeof(b)==“string” 调用代码(实际上是TypeScript)如下所示,以防有帮助: requestGET('
a
可能比b
短)。
但是,它总是返回0,好像第一个字符不同。
事实上,它们是:字符串a
的第一个字符ca
是正确的,但是由于某种神秘的原因,字符串b
的第一个cb
是空的!!!字符串b
看起来正确,长度正确(685个字符),类型正确typeof(b)==“string”
调用代码(实际上是TypeScript)如下所示,以防有帮助:
requestGET('qBandConfig.sql', { jobid: this.job.jobid }) // get the blob from db
.then(json => {
const base64:string = json[0]['bandconfig'] // type enforced to make sure
this.editor.setBands(base64)
.then(() => {
// test that we find the same blob when re-encoding
const check:string = this.editor.getBandsBLOB()
const diff = firstDiff(check, base64) // always return 0 ????
if (diff > -1 && check[diff] !== '=')
this.log.warning('encoded blob ', check, ' is different from decoded ', base64)
})
})
它可能包含一个不可打印的字符,如,在HTML中称为
代码>。我不确定Chrome开发工具在这种情况下会显示什么;它可能真的什么也看不出来
检查cb.length
,如果它是0,那么cb
是空的,否则它不是空的(很明显),然后您可以使用charCodeAt()
查找其中的内容
具有零宽度空格字符的示例代码:
var x=”";
log(“x==”+x+“”);
console.log(“x.length==”+x.length);
console.log(“x.charCodeAt(0)==”+x.charCodeAt(0));
我们应该在屏幕截图中找到问题吗?比较调试器中的值,提取失败的最小值集并将其发布到此处,检查是否有任何“不可见”的unicode字符(console.log([…a.slice(0,2)])
),就是这样,非常感谢!b.charCodeAt(0)返回65520…不知道为什么,因为字符串来自第三方数据库包,我希望Chrome调试器至少显示一个豆腐,但至少神秘感消失了。