EcmaScript 6
ES6을 사용하는 경우 항목의 배열을 구성하고 다음을 사용할 수 있습니다 includes
.
['a', 'b', 'c'].includes('b')
이 이상의 몇 가지 고유의 장점이 indexOf
제대로의 존재를 테스트 할 수 있기 때문에 NaN
목록을, 등의 중간 하나없는 배열 요소와 일치 수 [1, , 2]
에를 undefined
. 와 같은 JavaScript 형식의 배열includes
에서도 작동합니다 .Uint8Array
브라우저 지원 (IE 또는 Edge 등)에 대해 우려가있는 경우 CanIUse.Com 에서 확인할Array.includes
수 있으며 누락 된 브라우저 또는 브라우저 버전을 대상으로하려면 polyfilling 에 polyfill.io를 사용하는 includes
것이 좋습니다 .
배열없이
isInList
다음과 같이 문자열에 새 속성을 추가 할 수 있습니다 .
if (!String.prototype.isInList) {
String.prototype.isInList = function() {
let value = this.valueOf();
for (let i = 0, l = arguments.length; i < l; i += 1) {
if (arguments[i] === value) return true;
}
return false;
}
}
그런 다음 다음과 같이 사용하십시오.
'fox'.isInList('weasel', 'fox', 'stoat') // true
'fox'.isInList('weasel', 'stoat') // false
에 대해 동일한 작업을 수행 할 수 있습니다 Number.prototype
.
Array.indexOf
최신 브라우저를 사용하는 경우 indexOf
항상 작동합니다. 그러나 IE8 및 이전 버전의 경우 폴리 필이 필요합니다.
경우 indexOf
-1을 반환 항목은 목록에 없습니다. 그러나이 메소드는 제대로 검사하지 않으며 NaN
명시적인 값과 일치 undefined
할 수 있지만 누락 된 요소 undefined
는 배열에서 와 일치 할 수 없습니다 [1, , 2]
.
IE 용 폴리 필 indexOf
또는 includes
지원되지 않는 기타 브라우저 / 버전
위에서 언급 한 polyfill.io 와 같은 서비스를 사용하지 않으려는 경우 언제든지 자체 소스 코드 표준 호환 사용자 정의 폴리 필을 포함 할 수 있습니다. 예를 들어, Mozilla Developer Network에는에 대한 것이 indexOf
있습니다.
Internet Explorer 7 용 솔루션을 만들어야하는이 상황에서 indexOf()
표준과 호환되지 않는 더 간단한 버전의 기능을 "내 자신의 롤"으로 만들었습니다 .
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(item) {
var i = this.length;
while (i--) {
if (this[i] === item) return i;
}
return -1;
}
}
그러나 Array.prototype
장기적으로 수정 이 최선의 대답 이라고 생각하지 않습니다 . JavaScript에서 수정 Object
및 Array
프로토 타입을 작성하면 심각한 버그가 발생할 수 있습니다. 자신의 환경에서 안전한지 결정해야합니다. 중요한 것은 배열을 반복하면 (Array.prototype이 속성을 추가 한 경우) for ... in
새 함수 이름을 키 중 하나로 반환한다는 것입니다.
Array.prototype.blah = function() { console.log('blah'); };
let arr = [1, 2, 3];
for (let x in arr) { console.log(x); }
// Result:
0
1
2
blah // Extra member iterated over!
코드가 지금 작동 할 수도 있지만 미래의 누군가가 상속 된 키를 열심히 보호하지 않는 타사 JavaScript 라이브러리 또는 플러그인을 추가하는 순간 모든 것이 깨질 수 있습니다.
그 파손을 방지하는 기존 방법은 객체가 실제로 상속과 재산으로 보유하고 있는지 확인하기 위해 각 값을 확인하려면 열거하는 동안이며, if (arr.hasOwnProperty(x))
그리고 오직 다음 그와 함께 작업 x
.
이 추가 키 문제를 피하는 새로운 ES6 방법 of
은 in
, 대신 사용하는 것입니다 for (let x of arr)
. 그러나 모든 코드 및 타사 라이브러리 가이 방법을 엄격하게 준수한다고 보장 할 수 없다면이 질문의 목적을 위해 includes
위에서 언급 한대로 사용하고 싶을 것입니다 .