考虑codePointAt()
,length
和i
,我发现参数含义之间存在差异。在我真正想到它之前,我认为你可以安全地访问i+1
- 1处的角色。但我读到charCodeAt()和codePointAt()之间的区别是charCodeAt()是指16位(字节对)所以除了阅读length
之外,如果它们是代理对,你还需要length
(和UTF-16的方法一样。而codePointAt()需要一个引用UTF-8字符位置的参数(基于零)。所以现在我陷入困境,codePointAt()
是否计算字符数或UTF-16字节对的数量。我相信JavaScript将字符串保存为UTF-16,但是对于具有if ($stmt->execute()) {
return "TRUE";
} else {
return "FALSE";
}
函数的大量4字节字符的字符串,使用$statreset = $user->resetpassword($upass,$tokenrecover,$usermail);
echo $statreset;
if ($statreset =="TRUE"){
echo "query done";
}
- 1将不在字符串的末尾!
答案 0 :(得分:3)
length
的strings计入 16位无符号整数值(“元素”)或代码单元(它们一起形成)一个有效或无效的UTF16代码单元序列),它的索引也是如此。我们也可能称它们为“人物”。
无论您是访问它们as properties还是通过charAt
,chatCodeAt
和codePointAt
,length - 1
始终是有效索引。但是,代码点可以编码为跨越两个索引的代理对。没有内置方法来测量它们的数量,但默认字符串迭代器将产生它们,因此您可以使用for … of
循环来计算它们。
答案 1 :(得分:2)
使用[...str].length
作为字符数。
var mb = "";
console.log(mb.length);
console.log([...mb].length); // "real" length (ES6)
console.log(mb.charAt(0)); // The first two byte
console.log(mb.codePointAt(0)); // The first two byte
console.log(mb.codePointAt(1)); // The second two byte
console.log(mb.charCodeAt(0)); // The four bytes combined (ES6)
console.log(mb.charCodeAt(1)); // The second two byte (ES6)