考慮到charAt()
,charCodeAt()
和codePointAt()
我發現參數的含義不一致。在我真正想到它之前,我認爲你總是可以安全地訪問length
-1的字符。但是我讀到charCodeAt()和codePointAt()之間的區別在於charCodeAt()指的是16位(字節對),所以除了讀取i
之外,如果它們是代理對,還需要i+1
(如同使用UTF-16 )。而codePointAt()需要引用UTF-8字符位置(基於零)的參數。所以現在我對於是否對length
計數字符數或UTF-16樣式的字節對數目感到困惑。我相信JavaScript將字符串保存爲UTF-16,但是使用length
-1的字符串中包含大量4字節字符的codePointAt()
函數將不在字符串的末尾!什麼是JavaScript字符串的安全長度?
4
A
回答
3
的的stringslength
在16位無符號整數值(「元素」)或代碼單元進行計數(它們一起形成一個有效或無效的UTF16編碼單元序列),其指數也是如此。我們也可以稱他們爲「角色」。
不要緊,你是否訪問它們as properties或通過charAt
,chatCodeAt
和codePointAt
,length - 1
將永遠是一個有效的索引。代碼點可能被編碼爲跨越兩個索引的代理對。沒有內建的方法來測量它們的數量,但是默認的字符串迭代器會產生它們,所以你可以用for … of
循環對它們進行計數。
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)
相關問題
- 1. 爲什麼字符串的字節長度比長度長?
- 2. 長入字符串 - 是StrToInt()安全嗎?
- 3. 爲什麼stream.size總是比字符串的長度長
- 4. 爲什麼字符串長度不同?
- 5. 字符串的長度比字符串的長度長
- 6. 什麼是將被散列的字符串的最大長度?
- 7. 爲什麼我的字符串長度總是顯示爲長度2在iPhone?
- 8. 什麼是PHP會話ID字符串的長度?
- 9. var_dump報告錯誤的字符串長度是什麼意思?
- 10. 我不知道爲什麼字符串的長度是'0'
- 11. 安全讀取未知長度的字符串
- 12. JavaScript字符串的長度返回undefined
- 13. 什麼是asp.net連接字符串中的集成安全性
- 14. 的JavaScript安全的字符串
- 15. C#中的字符串性能 - 什麼是更快地比較,字符串文字或字符串長度
- 16. 字符長度Javascript
- 17. 安全傳遞字符串的JavaScript
- 18. 什麼是二進制安全字符串?
- 19. ksh:連接一個非常長的字符串是否安全
- 20. Javascript:檢查最小字符串長度
- 21. javascript字符串長度比較
- 22. Javascript:最大字符串長度Chrome
- 23. Javascript字符串正確長度
- 24. 錯誤字符串長度比較javascript
- 25. 什麼字符在查詢字符串中不安全?
- 26. access_token字符串的長度是多少?
- 27. 什麼是建立一個字符串,如果我有字符和長度
- 28. 什麼是「使用兩倍於寬度的長度打印字符串」。意思?
- 29. 這是什麼意思是「不可變的字符串是線程安全的」
- 30. javascript minification的安全性是什麼
只要有足夠的內存,字符串可以是任意長度。 – PHPglue