jslint工具的一个提示是:
++和——
++(递增)和——(递减)
众所周知,操作符会导致糟糕的代码
鼓励过度狡诈。他们
仅次于有缺陷的架构
使病毒和其他
安全威胁。这是一个加分项
选项,禁止使用这些
操作符。
我知道PHP结构像$foo[$bar++]可能很容易导致off-by-one错误,但我想不出一个更好的方法来控制循环比:
while( a < 10 ) do { /* foo */ a++; }
or
for (var i=0; i<10; i++) { /* foo */ }
jslint突出显示它们是因为有一些类似的语言缺少“++”和“——”语法或处理方式不同,还是有其他避免“++”和“——”的理由,我可能忽略了?
在作为前缀和后缀使用时,操作符的含义不同,这可能会导致难以发现的错误。考虑下面的例子,使用bubbleSort:
function bubbleSort(array) {
if(array.length === 1) return array;
let end = array.length - 2;
do {
for (let i = 0; i < array.length; i += 1) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
}
}
} while (end--);
}
bubbleSort([6,5]);
让我们想象一下,在运行程序的过程中,我们将一个包含两项的值传递给排序函数。代码按原样运行很好:“do/while”循环在达到条件之前首先执行。然而,程序认为结束是假的,并在变量递减之前退出循环。
现在考虑下面的代码,其中——符号用作前缀,而不是后缀。这段代码将进入一个无限循环:
function bubbleSort(array) {
if(array.length === 1) return array;
let end = array.length - 2;
do {
for (let i = 0; i < array.length; i += 1) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
}
}
} while (--end);
}
bubbleSort([6,5]);
现在,当我们达到while条件时,我们在检查它之前递减结束值。返回-1,这在Javascript中是一个真值。
我对它们的使用方式没有强烈的意见,但我只是想说明,如果不小心使用它们,它们会导致真正的错误。
在作为前缀和后缀使用时,操作符的含义不同,这可能会导致难以发现的错误。考虑下面的例子,使用bubbleSort:
function bubbleSort(array) {
if(array.length === 1) return array;
let end = array.length - 2;
do {
for (let i = 0; i < array.length; i += 1) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
}
}
} while (end--);
}
bubbleSort([6,5]);
让我们想象一下,在运行程序的过程中,我们将一个包含两项的值传递给排序函数。代码按原样运行很好:“do/while”循环在达到条件之前首先执行。然而,程序认为结束是假的,并在变量递减之前退出循环。
现在考虑下面的代码,其中——符号用作前缀,而不是后缀。这段代码将进入一个无限循环:
function bubbleSort(array) {
if(array.length === 1) return array;
let end = array.length - 2;
do {
for (let i = 0; i < array.length; i += 1) {
if (array[i] > array[i + 1]) {
swap(array, i, i + 1);
}
}
} while (--end);
}
bubbleSort([6,5]);
现在,当我们达到while条件时,我们在检查它之前递减结束值。返回-1,这在Javascript中是一个真值。
我对它们的使用方式没有强烈的意见,但我只是想说明,如果不小心使用它们,它们会导致真正的错误。