const colors = ["red", "green", "blue"];

/*
 * 주의하세요!
 * 배열에서 인덱스는 0부터 시작합니다.
 * 첫 번째 요소의 인덱스는 0이고, 두 번째 요소의 인덱스는 1입니다.
*/

// 배열 colors에서 요소 "red"를 찾아 첫 번째로 검색된(등장한) 요소의 인덱스를 반환합니다.
const red = colors.indexOf("red");
console.log(red); // 출력: 0;

// 배열 colors에서 인수로 전달된 요소 "yellow"를 찾을 수 없으므로 -1을 반환합니다.
const yellow = colors.indexOf("yellow");
console.log(yellow); // 출력: -1;

const blue = colors.indexOf("blue", 1);
// 두 번째 인수는 검색을 시작할 인덱스입니다.
// 이 인수는 옵션으로, 생략하면 처음(0)부터 검색합니다.
// 인수의 값이 1이므로, 두 번째 요소부터 검색했을 때 요소 "blue"는 검색이 되고,
// 맨 왼쪽(인덱스 0)부터 검색된 요소 "blue"의 인덱스는 2입니다.

console.log(blue); // 출력: 2;
arr.indexOf(searchElement[, fromIndex])
/*
 * 인수로 전달된 요소가 배열에서 중복으로 있다면,
 * 첫 번째로 검색된(등장한) 요소의 인덱스를 반환합니다.
*/
const colors = ["red", "green", "green", "blue"];

// 배열 colors에서 요소 "green"를 찾아 첫 번째로 검색된(등장한) 요소의 인덱스를 반환합니다.
const green = colors.indexOf("green");

// 배열 colors에서 요소 "green"은 두 개가 있습니다.
// 인덱스 1과 2에 있습니다.
// 하지만, 첫 번째로 검색된 요소의 인덱스인 1을 반환합니다.
console.log(green); // 출력: 1;


/*
 * arr.indexOf(searchElement[, fromIndex])
 *
 * 옵션(선택적)으로 사용하는 fromIndex가 음수 값일 경우
 * 배열의 끝에서부터 역으로 카운트됩니다.
 * 그러나, 여전히 왼쪽에서 오른쪽으로 검색합니다.
*/
const fruits = ["apple", "bannana", "orange", "mango"];
const index = fruits.indexOf("mango", -2);

console.log(index); // 출력: 3;
// fromIndex 값이 -2입니다.
// 배열의 끝에서부터 역으로 카운트되기 때문에
// 끝에서 두 번째 요소인 "orange"부터 검색합니다.
// 그러나 여전히 왼쪽에서 오른쪽으로 검색합니다.
// 찾고자 하는 요소인 "mango"는 "orange"의 오른쪽에 존재함으로,
// fruits 배열에서 "mango"의 인덱스인 3이 출력됩니다.
const arr = [1, 2, NaN, 4, 5];
console.log(arr.indexOf(NaN)); // 출력: -1
const colors = ["red", "green", "blue"];
const red = colors.indexOf("Red");

// 대문자 "R"과 소문자 "r"을 구분합니다.
console.log(red); // 출력: -1;
const arr = [1, 2, 3, 4, 5];
const element = 3;

if (arr.indexOf(element) !== -1) {
    console.log(`${element}는 배열에 존재합니다.`);
} else {
    console.log(`${element}는 배열에 존재하지 않습니다.`);
}

// 출력: "3는 배열에 존재합니다."
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];

arr.forEach(element => {
    if (uniqueArr.indexOf(element) === -1) {
        uniqueArr.push(element);
    }
});

console.log(uniqueArr); // 출력: [1, 2, 3, 4, 5]
const arr = [1, 2, 2, 3, 4, 4, 5];
const uniqueArr = Array.from(new Set(arr));

console.log(uniqueArr); // 출력: [1, 2, 3, 4, 5]
const arr = [1, 2, 3, 4, 5];
const element = 3;
const startIndex = 1;
const endIndex = 3;
const subArray = arr.slice(startIndex, endIndex + 1);

if (subArray.indexOf(element) !== -1) {
    console.log(`${element}은/는 주어진 범위 내에서 배열에 존재합니다.`);
} else {
    console.log(`${element}은/는 주어진 범위 내에서 배열에 존재하지 않습니다.`);
}

// 출력: "3은/는 주어진 범위 내에서 배열에 존재합니다."

caniuse.com에서 더 자세한 정보를 확인해 보세요.