답변
그것은 변수 "도착"을 선언하고 변수가있는 경우에는 "도착"는 "truthy"하지 않는 한, 이미 (아마도 약간 외측 범위) 실존 다른 변수의 수 해당 값을 설정 새로운 빈 배열을 참조하도록 설정합니다. 이미 현존하는 "도착"가 값 null
, 0
, false
또는 ""
가 있거나 undefined
다음 로컬 ", 언"것이다 빈 배열 따라서 경우
. 그렇지 않으면 외부 "arr"과 동일한 값을 갖습니다.
당신은 일반적으로 이런 상황에서 것을 볼 것입니다 :
var arr;
function whatever() {
var arr = arr || [];
...
}
때때로 사람들은 이렇게 :이 경우
function questionable(arr) {
var arr = arr || [];
에서, var
이 필요하지 않습니다.
JavaScript의 ||
연산자가 다른 C 유사 언어의 사촌과 분명히 다르기 때문에 모든 방법이 효과적입니다. JavaScript에서 ||
표현식의 값은 이 아니며 부울이되도록이되어야합니다. 대신 왼쪽 피연산자 또는 오른쪽 피연산자의 값입니다. 은이 "truey"인지 여부를 확인하기 위해 값을 검사하지만 부울 값은 내부 값입니다. 왼쪽이 "truthy"이면 ||
표현식의 값은 해당 값입니다. 그렇지 않으면 오른쪽의 값입니다. 왼편이 "진실"일 때 우변은 전혀 평가되지 않습니다.
은 falsy이다 Array
arr
경우의 new
인스턴스를 인스턴스.
이 패턴을 "널 병합 작업"이라고합니다. 당신은 C#을 잘 알고 있다면 당신은 다음과 같이 뭔가를 할 거라고 :
string foo = bar ?? String.Empty
가 여기 thorough post on the topic입니다.
기본적으로 Javascript 및 다른 언어 (예 : Perl)에서는 ||
이 단락 회로 연산자로 사용되는 경우가 많습니다. 이 b
을 평가합니다
a = b || c || d || e || f;
: 먼저 정의 중 5 개 다른 변수 중 하나의 값을 할당해야 할 변수가있는 경우, 당신은 뭔가를 시도 할 수 있습니다. 값이 true
인 경우 a
에 b
이 할당되며 그게 전부입니다. b
이 false
인 경우 검색은 c
으로 전파됩니다. 새로운 값을 할당할지 여부를 확인하기 위해 종종 변수를 자체와 비교해야합니다. 이것이 a = a || b
의 기능입니다. Perl이라면 a ||= b
으로 줄일 수있었습니다.
실제로 "a | = b"이지만 "a || = b"와 같은 구문도 C에 있습니다. 그럼에도 불구하고, 정보 주셔서 감사합니다, 그것은 매우 도움이됩니다. –
언제든지, 친구. 코딩을 계속하십시오! – SexyBeast
var arr = foo || []; foo가 정의되지 않은 경우 오류가 발생할 수 있습니다. 두 문장은 다른면에서 동일합니다. – AlexMA
"아마도 ..."라는 의미는 무엇입니까? 어떤 상황에서 오류가 발생합니까? –
foo가 정의되지 않으면 * 항상 * 오류가 발생합니다. 나는 그 문장을 다시 쓰고 그 말을 바꾸지 않았다. – AlexMA