javascript - 循环分配然后中断
问题描述
我来自 C/Python 背景,下面的 JavaScript 代码让我很困惑。为什么c
程序末尾的值不是6
?因为我们是在分配和破坏之后。(我在 JSFiddle 上运行过这个)
function funct() {
var bytes = new Uint8Array(6);
bytes[0] = 228;
bytes[1] = 191;
bytes[2] = 157;
bytes[3] = 233;
bytes[4] = 153;
bytes[5] = 186;
bytes[6] = 255;
bytes[7] = 17;
bytes[8] = 23;
bytes[9] = 223;
var c = 0;
for (var i = 0; i < bytes.length; i++) {
if (bytes[i] == 255) {
c = i;
break;
}
}
console.log(i);
console.log(c);
}
funct();
输出:
6
0
解决方案
您的数组大小为 6,但索引 6 是第 7 个条目。您需要为数组分配更多空间:
function funct() {
var bytes = new Uint8Array(10);
bytes[0] = 228;
bytes[1] = 191;
bytes[2] = 157;
bytes[3] = 233;
bytes[4] = 153;
bytes[5] = 186;
bytes[6] = 255;
bytes[7] = 17;
bytes[8] = 23;
bytes[9] = 223;
var c = 0;
for (var i = 0; i < bytes.length; i++) {
if (bytes[i] == 255) {
c = i;
break;
}
}
console.log(i);
console.log(c);
}
funct();
推荐阅读
- php - 用选择的变化选项价格替换可变 GravityFroms 价格范围
- mysql - 将从json值中提取的字符串转换为返回NULL的日期
- c# - WPF填充DataGrid
- python - 关于在python中使用正则表达式的字符串问题
- java - 如何从现有的 c 项目(协和)为 JNI 创建 .dylib
- python - Django Rest Framework 序列化错误:类型类型的对象不是 JSON 可序列化的
- java - Spring Boot @ExceptionHandler 在开发服务器上工作但不在本地
- android - 使用 Amazon S3 TransferUtility 文件作为 Fresco 的图像源
- oracle - Oracle实体框架代码第一个日期时间生成为日期而不是时间戳
- security - 如何使用密码对 .p12 进行字典攻击(教育目的)