# 99. ETC

## Tips

### in 연산자

* in 연산자는 명시된 속성이 명시된 객체에 존재하면 true를 반환합니다.
* 속성이란 즉, 키 값을 말한다
* 오브젝트에서의 키 해당 오브젝트의 키이지만, 배열에서의 키는 인덱스이다.

```js
const trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
0 in trees; // 배열의 0번째 인덱스가 존재하기 때문에 true를 반환합니다.

6 in trees; // false를 반환합니다.

'bay' in trees; // false를 반환합니다. 배열의 내용이 아닌, 인덱스 값을 명시하여야 합니다.
'length' in trees; // true를 반환합니다. length는 Array(배열) 객체의 속성입니다.

// 미리 정의된 객체
'PI' in Math; // true를 반환합니다.
'P' + 'I' in Math; // true를 반환합니다.
```

in 연산자는 delete (en-US) 연산자로 제거된 속성에 대하여 false를 반환합니다.

```js
const myCar = {
  company: 'Lamborghini',
  model: 'Lamborghini Veneno Roadster',
  year: 2014,
};
delete myCar.company;
'company' in myCar; // false를 반환합니다.

var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
delete trees[3];
3 in trees; // false를 반환합니다.
```

그럴일은 없겠지만 속성을 undefined로 설정하였는데 그것을 제거하지 않으면, in 연산자는 그 속성에 대하여 true를 반환합니다.

in 연산자는 프로토타입 체인에 의하여 접근할 수 있는 속성에 대하여 true를 반환합니다.

```js
'toString' in {}; // true를 반환합니다.
```

***

### include

* Array 인스턴스의 includes() 메서드는 배열의 항목에 특정 값이 포함되어 있는지를 판단하여 true 또는 false를 반환합니다.

```js
const array1 = [1, 2, 3];

console.log(array1.includes(2));
// Expected output: true

const pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat'));
// Expected output: true

console.log(pets.includes('at'));
// Expected output: false
```

### 구문

```js
includes(searchElement);
includes(searchElement, fromIndex);
```

* fromIndex가 배열의 길이보다 크거나 같으면 false가 반환됩니다. 배열은 검색되지 않습니다.
* fromIndex가 음수라면, 계산된 인덱스가 searchElement 검색을 시작할 배열의 위치로 사용되도록 계산됩니다. 계산된 인덱스가 0보다 작거나 같으면 전체 배열에서 검색됩니다. **하지만, 이렇게는 사용하지 맙시다.**
