---
# System prepended metadata

title: +_indexOf 你好奇妙
tags: [javascript]

---

# +_indexOf 你好奇妙

### 先來看一個認知上合理的例子
```javascript!
const a = 1;
const b = 2;
const c = 3;
const arr = [ a, b, c ]
console.log(arr.indexOf(a)); // 0
console.log(arr.indexOf(b)); // 1
console.log(arr.indexOf(c)); // 2
```
### 再看一下這個莫名其妙的例子
```javascript!
const d = 0;
const e = 0;
const f = 0;
const arr2 = [ d, e, f ]
console.log(arr2.indexOf(d)); // 0
console.log(arr2.indexOf(e)); // 0
console.log(arr2.indexOf(f)); // 0

// 為啥！e 和 f 都會跟我說 index 是 0 😢😢😢 不是應該查找元素的索引值嗎
```

### 運作原理
> MDN：indexOf() 方法會回傳給定元素於陣列中==第一個被找到==之索引，若不存在於陣列中則回傳 -1。

所以它將會遍歷 () 中元素的值，並由左至右去尋找陣列元素的索引，先找到就會回傳該元素的索引值。

例如 `console.log(e);` 在 `const arr2 = [ d, e, f ]` 其中查找 `e` 的 index 時，會先判別 `e` 的值是什麼，是 0！！！
所以它就覺得喔，誰是 0，`d` 啊，就給你回傳 `d` 的 index => 0

### 看看 J 個，如果變數指向的都是同一個值
```javascript!
const g = 4
const h = 4
const i = 4
const arr3 = [ g, h, i ];
console.log(arr3.indexOf(g)); // 0
console.log(arr3.indexOf(h)); // 0
console.log(arr3.indexOf(i)); // 0
```
奇妙現象，讚讚掰掰