Что в этом плохого?проверка строкового элемента в массиве javascript
var colours = ['red','green', 'blue']
console.log('blue' in colours); // outputs false
Он выводит false, я бы подумал, что это должно быть trye.
Благодаря
Что в этом плохого?проверка строкового элемента в массиве javascript
var colours = ['red','green', 'blue']
console.log('blue' in colours); // outputs false
Он выводит false, я бы подумал, что это должно быть trye.
Благодаря
Так как вы имеете дело с Array
там вы не можете проверить это таким образом. Arrays
предлагает вам метод Array.prototype.indexOf
, чтобы определить, действительно ли что-то там:
console.log(colours.indexOf('blue') > -1);
Объяснение:
Массивы в ECMAScript только специализированные Objects
. Это означает, что ваш массив действительно выглядит
colours = {
0: 'red',
1: 'green',
2: 'blue'
};
Поскольку in
оператор проверяет только для объекта keys
, вы не можете проверить значения с ней. Вы действительно можете проверить, например, if('1' in colours)
(который вернет true
), но это не имеет большого смысла. Опять же, используйте .indexOf()
для массивов.
Примечание: ECMAscript Harmony (ES.Next, или ES6) будет давать цикл for of
, который вместо ключей перечисляет значения объектов. Я не совсем уверен, можем ли мы использовать оператор of
так же, как in
, но это было бы очень полезно.
Использование colours.indexOf('blue')
.
Это будет работать только с объектами. Он проверяет, имеет ли объект свойство.
var colours = { red: 123, green: true, blue: "foo"};;
console.log("blue" in colours);
Использование indexOf
в современных браузерах:
var colours = ['red','green', 'blue'];
console.log(colours.indexOf("blue") != -1);
Проблема заключается в том, что 'в' оператор в JavaScript не так хорошо, как это, например, в Python. – ThiefMaster