/**
 * 判断数组中是否包含某个值
 * @param arr 数组
 * @param str 值
 * @returns {boolean}
 */
function contains(arr, str) {
    var i = arr.length-1;
    while (i--) {
        if (arr[i] == str) {
            return true;
        }
    }
    return false;
}

 

var arr1 = ['a', 'b'];
var arr2 = {'name': 'yy', 'password': '123'};

//in 的使用
console.log('a' in arr1); //false
console.log('a' in arr2); //false

//indexOf 的使用
console.log(arr1.indexOf('a')); // true
console.log(arr2.indexOf('a')); //报错

//includes的使用
console.log(arr1.includes('a')); //true
console.log(arr2.includes('a')); //报错

 

function inArray (array, search) {
    for (var i in array) {
        if (array[i] == search) {
            return true;
        }
    }
    return false;
}

 

总结:

  1. in操作符针对的是key,而非value。而对于普通的一维数组来说,key是隐藏的。所以,对于判断某个数组中是否含有某个值来说,这个方案并不合适。
  2. indexOf是用于字符串的。但是在这里,用于一个数组的话,也是可以执行的。但是用在一个对象obj上面的时候,是报错的。
  3. 同indexOf一样,includes仅能用于数组操作