이 식을 예상했기 때문에 코드에서 많은 버그가 발생했습니다.
Boolean([]);
거짓으로 평가합니다.
그러나 이것은 사실로 평가 되었기 때문에 그렇지 않았습니다.
따라서 []
다음과 같이 반환 될 수있는 함수 :
// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
// ...
}else
{
// ...
}
예상 한 일을하지 않았습니다.
내가 []
빈 배열 이라고 잘못 생각하고 있습니까?
또한이 동작이 모든 브라우저에서 일관됩니까? 아니면 거기에도 문제가 있습니까? 그런데 Goolgle Chrome에서이 동작을 관찰했습니다.
답변
에서 http://www.sitepoint.com/javascript-truthy-falsy/
다음 값은 항상 거짓입니다.
- 그릇된
- 0 (영)
- “”(빈 문자열)
- 없는
- 찾으시는 주소가 없습니다
- NaN (Not-a-Number!를 의미하는 특수 숫자 값)
“0”(따옴표로 묶인 0), “false”(따옴표로 묶인 false), 빈 함수, 빈 배열 및 빈 개체를 포함한 다른 모든 값은 진실입니다.
이것이 왜 그런지에 관해서 는 JavaScript 배열이 특정 유형의 객체이기 때문이라고 생각합니다. 배열을 특별히 처리하려면 테스트에 추가 오버 헤드가 필요합니다 Array.isArray()
. 또한이 컨텍스트에서 실제 배열이 다른 배열과 같은 객체와 다르게 작동하면 혼란 스러울 수 있지만 모든 배열과 유사한 객체를 동일하게 작동하게 만드는 것은 훨씬 더 비쌉니다.
답변
.length
요소가 포함되어 있는지 확인하려면 해당 배열 의을 확인해야합니다 .
if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)