А почему бы и нет? new Array([], null, undefined, null)
это [ [], null, undefined, null ]
если сделать toString(), получим ',,,'
так почему бы ваше сравнение должно давать не true?
Потому что оператор == приводит операнды к единому типу, в данном случае к строке привести проще, поэтому и true
Операторы === и !== не приводят типы в отличии от их аналогов == и !=, поэтому лучше использовать их в большинстве случаев, так как во-первых, они быстрее, во-вторых меньше неявных багов
```в данном случае к строке привести проще```
Не проще, а потому что сначала идет числовое преобразование valueOf, которое в массиве если не задано специально возвращает сам массив, поэтому бесполезно. После этого вызывается toString, который и дает нужный эффект.