/** * 判断数组中是否包含某个值 * @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; }
总结:
- in操作符针对的是key,而非value。而对于普通的一维数组来说,key是隐藏的。所以,对于判断某个数组中是否含有某个值来说,这个方案并不合适。
- indexOf是用于字符串的。但是在这里,用于一个数组的话,也是可以执行的。但是用在一个对象obj上面的时候,是报错的。
- 同indexOf一样,includes仅能用于数组操作