Skip to content

Latest commit

 

History

History
43 lines (29 loc) · 1.3 KB

javascript-includes.md

File metadata and controls

43 lines (29 loc) · 1.3 KB

문제

import { Eq } from 'fp-ts/Eq'

type Point = {
  readonly x: number
  readonly y: number
}

const EqPoint: Eq<Point> = {
  equals: (first, second) => first.x === second.x && first.y === second.y
}

const points: ReadonlyArray<Point> = [
  { x: 0, y: 0 },
  { x: 1, y: 1 },
  { x: 2, y: 2 }
]

const search: Point = { x: 1, y: 1 }

console.log(points.includes(search)) // => false :(
console.log(pipe(points, elem(EqPoint)(search))) // => true :)

includes 메소드가 false를 반환할까요?

정답

includes 메소드는 원시 값의 경우 값으로 비교하고 다른 경우에는 참조로 비교합니다.

자세한 설명은 여기를 확인하세요. includes()는 sameValueZero 알고리즘을 사용해 전달된 요소가 있는지 결정합니다.

sameValueZero 알고리즘은 ===를 사용하는 것과 매우 비슷하며 객체는 값 대신 참조를 비교합니다. (자세한 내용은 여기를 확인하세요.)

console.log({ foo: 'bar' } === { foo: 'bar' }) // => false

const foo = { foo: 'bar' }
console.log(foo === foo) // => true