javascript中 n–与 --n的区别
--n
,自减操作符放在变量前先进行本身的自减,再进行其他操作,
n--
,自减操作符放在变量后面先进行其他的操作,再进行自身的自减,例如
var x = 2;
console.log(x++); // 2
console.log(x); //3
console.log(++x); // 4
while( ) 循环中
n--
等同于 选判断num是否为真 ,再进行自减(n = n -1
)操作后进入循环体中进行操作
--n
等同于 先进行自减操作后,再进行判断后进入循环体 中进行操作
相同点都是进行自减后,再进入循环体的,不同点在于是在自减前还是后再进行判断
var num1 = 3;
while(num1--) {
console.log(num1); // 2 1 0
}
var num2 = 3;
while(--num2) {
console.log(num2); // 2 1
}
小应用 截取Vue源码片段
/**
* Convert an Array-like object to a real Array.
* 将类Array的对象转换为数组。
*/
function toArray(arr, start)
{
start = start || 0;
var len = arr.length - start;
var ret = new Array(len);
while(len--)
{
ret[ len ] = arr[ len + start ];
}
return arr;
}
假设情景
//类数组 arr
var arr = {'0': 1,'1': 2,'2': 3, 'length': 3};
var start = 1;
var len = arr.length - start; // 2
var ret = new Array(len); //定长为 2的数组
while(len--)
{
// 首次 len = len - 1;
// 这样的话 ret[ len ] 就表示 ret 最后一项
// arr[ len + start ] 就表示 arr 最后一项
ret[ len ] = arr [ len + start ];
}
ret // [2, 3]
分析可以得出 start = 1 指的是从类数组的第一项开始截取
这个效果类似与 arr.slice(1) 结果相同目的不同而已
Array.prototype._slice = function (start, end)
{
var arr = [], len = this.length;
start = start || 0;
end = end || this.length;
if(type)
for ( ;start < end; start++)
{
arr.push(this[start]);
}
}