es6 - javascript parameter default value internet explorer




JavaScript OR(||) 변수 할당 설명 (8)

Javacript는 논리 연산자에 대한 단락 평가 를 사용합니다. ||&& . 그러나 true 또는 false 값 대신 실행을 중단시킨 마지막 값의 결과를 반환한다는 점에서 다른 언어와 다릅니다.

다음 값은 JavaScript에서 위증이라고 간주됩니다.

  • 그릇된
  • 없는
  • "" (빈 문자열)
  • 0
  • 정의되지 않은

연산자 우선 순위 규칙을 무시하고 간단하게 유지하는 다음 예제는 평가를 중단 한 값을 보여주고 결과로 반환됩니다.

false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"

NaN 까지의 처음 5 개 값은 위증하므로 첫 번째 truthy 값을 만족할 때까지 모두 왼쪽에서 오른쪽으로 평가됩니다. 전체 표현식을 true로 만드는 "Hello" 는 더 이상 평가되지 않고 "Hello" 가됩니다. 표현식의 결과로 리턴됩니다. 마찬가지로,이 경우 :

1 && [] && {} && true && "World" && null && 2010 // null

첫 번째 5 개의 값은 모두 진실이며, 첫 번째 위조 값 ( null )을 충족 시켜서 표현식을 false로 만들 때까지 평가되므로 2010 은 더 이상 평가되지 않으며 표현식의 결과로 null 이 반환됩니다.

예를 들어 JavaScript의이 속성을 사용하여 과제를 수행하는 것입니다. 일련의 값 중에서 첫 번째 진리 또는 위조 된 값을 얻는 데 필요한 곳이면 어디서든 사용할 수 있습니다. 아래 코드는 if-else 검사를하는 대신에 디폴트 값을 할당하는 것을 더 쉽게 해주기 때문에 "Hello" 값을 b 에 할당합니다.

var a = false;
var b = a || "Hello";

아래 예제를이 기능의 사용이라고 부를 수 있습니다. 코드를 읽기가 더 어렵게 만듭니다.

var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);

경고 내에서 우리는 messages 가 허위인지 확인하고, 그렇다면 noNewMessagesText 를 평가하고 반환 noNewMessagesText . 그렇지 않으면 newMessagesText 평가하고 반환합니다. 이 예제에서는 위증하기 때문에 noNewMessagesText에서 중단하고 "Sorry, you have no new messages." 경고 "Sorry, you have no new messages." .

자바 스크립트 스 니펫을 감안할 때 ...

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f = a || b || c || d || e;

alert(f); // 4

누군가이 기술이 무엇이라고 불려지는지 제게 설명해 주시겠습니까? (내 생각에이 질문의 제목에!) 어떻게 / 왜 정확히 작동합니까?

내 이해는 변수 f 는 null이 아니거나 정의되지 않은 값을 가진 첫 번째 변수의 가장 가까운 값 (왼쪽에서 오른쪽으로)이 할당되지만이 기법에 대한 많은 참조 자료를 찾을 수 없었고 많이 사용되는 것을 보았습니다.

또한이 기술은 JavaScript에만 해당합니까? 나는 PHP에서 비슷한 일을하는 것이 fd 자체의 값이 아니라 진정한 부울 값을 갖게된다는 것을 안다.


Javascript 변수는 입력되지 않으므로 부울 연산자를 통해 할당 된 경우에도 f에 정수 값을 할당 할 수 있습니다.

f에는 false와 같지 않은 가장 가까운 값이 할당됩니다. 따라서 0, false, null, undefined가 모두 전달됩니다.

alert(null || undefined || false || '' || 0 || 4 || 'bar'); // alerts '4'

거기에는 어떤 마법도 없습니다. 부울 식은 a || b || c || d a || b || c || d a || b || c || d 는 느슨하게 평가됩니다. Interpeter는 a 의 값을 찾습니다. 정의되지 않았으므로 false로 이동합니다. 그런 다음 b 가 null 인 것으로 보입니다. 여전히 false 결과를 제공하므로 계속 이동합니다. 그러면 c - same story가 표시됩니다. 마지막으로 d 보고 '허, null이 아니므로 내 결과가 있습니다.'라고 말하고 최종 변수에 할당합니다.

이 트릭은 부울 표현의 지연 회로 평가를 게을리하는 모든 동적 언어에서 작동합니다. 정적 언어에서는 컴파일되지 않습니다 (유형 오류). 부울 표현식을 평가하는 데 열심 인 언어에서는 논리 값을 반환합니다 (이 경우 true).


그것의 불리는 단락 회로 운영자.

단락 평가에 따르면 두 번째 인수는 첫 번째 인수로 표현식의 값을 결정하기에 충분하지 않은 경우에만 실행되거나 평가됩니다. OR (||) 함수의 첫 번째 인수가 true로 평가되면 전체 값이 true 여야합니다.

함수 인수의 기본값을 설정하는 데 사용할 수도 있습니다 .`

function theSameOldFoo(name){ 
  name = name || 'Bar' ;
  console.log("My best friend's name is " + name);
}
theSameOldFoo();  // My best friend's name is Bar
theSameOldFoo('Bhaskar');  // My best friend's name is Bhaskar`

설명은 단락 평가 를 참조하십시오. 이 연산자를 구현하는 일반적인 방법입니다. 자바 스크립트 만이 아닙니다.


이 질문에는 이미 여러 가지 좋은 대답이 있습니다.

요약하면,이 기술은 언어가 컴파일되는 방식을 이용합니다. 즉, JavaScript는 부울 연산자의 평가를 "단락"하고 첫 번째가 아닌 변수 값 또는 마지막 변수에 포함 된 값과 관련된 값을 반환합니다. false로 평가되는 값에 대한 Anurag의 설명을 참조하십시오.

이 기술을 사용하는 것은 여러 가지 이유로 우수 사례가 아닙니다. 하나.

  1. 코드 가독성 : 부울 연산자를 사용하며,이 컴파일 방법의 동작을 이해하지 못하면 예상 결과는 부울 값이됩니다.
  2. 안정성 : 여러 언어에서 모순되는 언어 컴파일 방법을 사용하고 있기 때문에 향후 변경 대상이 될 가능성이 있습니다.
  3. 문서화 된 기능 :이 필요성을 충족시키고 더 많은 언어에서 일관된 기존의 대안이 있습니다. 이것은 삼항 연산자입니다 :

    ()? 값 1 : 값 2.

삼항 연산자를 사용하면 타이핑이 조금 더 필요하지만 평가되는 부울 식과 할당 할 값을 명확하게 구별 할 수 있습니다. 또한 체인화 될 수 있으므로 위에 수행되는 기본 지정 유형을 다시 만들 수 있습니다.

var a;
var b = null;
var c = undefined;
var d = 4;
var e = 'five';

var f =  ( a ) ? a : 
                ( b ) ? b :
                       ( c ) ? c :
                              ( d ) ? d :
                                      e;

alert(f); // 4

즉, x 가 설정되면 z 의 값은 x , 그렇지 않으면 y 가 설정된 경우 해당 값이 z 의 값으로 설정됩니다.

그것은

if(x)
  z = x;
else
  z = y;

자바 스크립트의 논리 연산자가 부울 값을 반환하지는 않지만 연산을 완료하는 데 필요한 마지막 요소의 값을 반환 할 수 있기 때문에 가능합니다 (OR 구문에서 AND 구문의 첫 번째 비 - 거짓 값이 될 것입니다). ). 작업이 실패하면 false 가 반환됩니다.


출력 첫 번째 true 값을 반환 합니다 .

모두 false 인 경우 마지막 false 값을 반환합니다.

예:-

  null || undefined || false || 0 || 'apple'  // Return apple




or-operator