非空字符串 .charAt(0) return 怎么可能是空字符串?
how can a non empty string .charAt(0) return an empty string?
我真的被这个弄糊涂了...太难以置信了我 post 截屏了 Chrome 调试器:
我在测试中快速编写了这个函数来比较 2 个 base64 编码的字符串(a
可能比 b
短)。
但是它总是 return 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)
})
})
它可以包含不可打印的字符,例如 Zero Width Space,在 HTML 中称为 ​
。我不确定 Chrome 开发工具在这种情况下会显示什么;它可能确实什么也没显示。
检查 cb.length
,如果它是 0 那么 cb
是空的,否则它不是空的(显然)然后你可以使用 charCodeAt()
找出那里有什么。
零宽度 Space 字符的示例代码:
var x = "";
console.log("x === '" + x + "'");
console.log("x.length === " + x.length);
console.log("x.charCodeAt(0) === " + x.charCodeAt(0));
我真的被这个弄糊涂了...太难以置信了我 post 截屏了 Chrome 调试器:
我在测试中快速编写了这个函数来比较 2 个 base64 编码的字符串(a
可能比 b
短)。
但是它总是 return 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)
})
})
它可以包含不可打印的字符,例如 Zero Width Space,在 HTML 中称为 ​
。我不确定 Chrome 开发工具在这种情况下会显示什么;它可能确实什么也没显示。
检查 cb.length
,如果它是 0 那么 cb
是空的,否则它不是空的(显然)然后你可以使用 charCodeAt()
找出那里有什么。
零宽度 Space 字符的示例代码:
var x = "";
console.log("x === '" + x + "'");
console.log("x.length === " + x.length);
console.log("x.charCodeAt(0) === " + x.charCodeAt(0));