关键是indexOf的用法:
indexOf是判断resArr数组中的值和当前的值有没有相同的,如果有相等的会返回那个位置,没有相同的返回-1,这里返回-1的意思是没有相同的,也就是resArr数组里还没有当前的数。再之后再遇到有相同的就不会返回-1了,也就不会继续执行if里面的了。
Array.prototype.uniq = function () {
-
var resArr = [];
-
var flag = true;
-
-
for(var i=0;i<this.length;i++){
-
if(resArr.indexOf(this[i]) == -1){
-
if(this[i] != this[i]){ //排除 NaN
-
if(flag){
-
resArr.push(this[i]);
-
flag = false;
-
}
-
}else{
-
resArr.push(this[i]);
-
}
-
}
-
}
-
return resArr;
-
}
NaN 即 Not a Number
, 不是一个数字,JS中number数据类型中除了浮点型和整数型还有一个特殊的值 NaN。
NaN, 它是用来表示是否属于number类型的一种状态: 是或否。而不是一个确切的值。
当一个表达式返回了NaN 时,表示该表达式中存在不可以转化的变量,并返回了无效的结果,并不是返回了一个确切的值。
如果非要说NaN是一个值得话,那么 NaN 就是除过数字的任意值,但绝不是确切的某一个值.
所以 NaN != NaN , 因为它是一个范围,而不能代表一个确定的值