我正在参加 CTF 锦标赛,问题之一是此行的一些 js 代码:
result[(j * LEN) + i] = bytes[(((j + shifter) * LEN) % bytes.length) + i]
忽略所有变量。我很困惑数组 results
中的某些内容与值中的某些内容相同。本质上,我对此感到困惑:
Array[a = b]
有人能解释一下为什么这样有效吗?
最佳答案
您混淆了嵌套级别。
result[(j * LEN) + i] = bytes[(((j + shifter) * LEN) % bytes.length) + i]
// original code above: it's equivalent to below:
result[(j * LEN) + i] = rightHandSide
result[(jTimesLen) + i] = rightHandSide
result[jTimesLenPlusI ] = rightHandSide
这只是对对象或数组索引的普通赋值。
不过,arr[a = b]
也是合法的,只是令人困惑;赋值解析为表达式,因此 arr[a = b]
将 b
赋值给(已经存在的)变量 a
,然后访问 >b
arr
的索引(但访问索引后不执行任何操作)。
a = 3;
b = 5;
arr = [];
arr[a = b];
console.log(a);
console.log(arr);
关于javascript - 奇数数组格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151326/