최신 JavaScript 심층 분석(논리 연산자를 사용한 짧은 평가, 선택적 연결 연산자, null 병합 연산자)

논리 연산자는 항상 참 또는 거짓으로 평가되지 않을 수 있습니다.

전에는 몰랐는데 지금은 뒷머리가 아프다.

연산자 표현식 OR( || ) 및 AND( && )는 항상 두 피연산자 중 하나로 평가됩니다.

'a' && 'b' //"b"

왜 b라고 합니까?

논리적 복합물(&&)은 두 피연산자가 모두 true로 평가되는 경우에만 true를 반환합니다.

‘a’는 참이므로 참으로 평가됩니다. 다음 피연산자에 논리값이 있는 경우에만 true를 반환합니다.가능하며, 기타 잘못된 값을 입력하면 false가 반환됩니다.

이런 이유로 다음 피연산자 ‘b’는 AND 연산자의 식을 평가한 결과를 결정합니다.하는 것이다

이때, 논리 AND 연산자는 연산 결과를 참으로 만드는 피연산자 ‘b’를 반환합니다.하다.

논리 곱(||)은 true를 반환하는 조건이 다르다는 점을 제외하면 논리 곱과 동일하게 작동합니다.

'a' || 'b' //"a"

논리적 AND는 피연산자 중 하나가 참이면 참을 반환합니다.

따라서 왼쪽에서 오른쪽으로 평가하는 논리 연산자의 경우 “a”가 평가될 때 참이므로 이후 값이 참인지 거짓인지는 중요하지 않습니다.

그러나 ‘a’는 true로 판단되었으므로 더 이상 평가할 필요는 없습니다.

따라서 ‘a’를 반환합니다.

이런 식으로 논리 연산의 결과를 결정하는 피연산자는 유형 변환 없이 반환됩니다. 단락 평가그것은 말한다.

요약된 평가는 전술한 바와 같이 수행된다. 결과가 확인되면 나머지 평가 과정을 건너뜁니다.하다.

참 || 아무것 진실
틀렸어 || 아무것 아무것
사실 && 모든 것 아무것
잘못된 && 모든 것 잘못된

이전 피연산자의 판단 결과를 확인합니다. 논리 OR의 선행 피연산자가 참이거나 논리 AND의 선행 피연산자가 거짓인 경우오전.

이것을 보면 if 문과 비슷합니다.

if 문은 true인 경우에만 작동하므로 true일 때 반환하려는 논리 값 연산자에 값을 입력하기만 하면 됩니다.

var done = true;
var message="";

//일반 if문
if(done) message="완료";


//단축 평가로 바꾸기
message = done &&'완료';
console.log(message); //완료

false로 평가되는 값을 반환하려면 OR

var done = false;
var message="";

//일반 if문
if(done) message="미완료";

//단축평가로 바꾸기
message = done || '미완료';
console.log(message);

이전 피연산자가 false로 평가되기 때문에 나중에 true로 평가될 수 있는 메시지가 나타날 수 있습니다.

if 문에서 else를 사용하려면 삼항 조건 연산자를 참조로 사용할 수 있습니다.

var done = true;
var message="";

//if else문
if(done) message="완료";
else message="미완료";
console.log(message);

//삼항 조건 연산자
message = done ? '완료' : '미완료';
console.log(message); //완료

솔직히 큰 차이는 못느끼겠습니다.

나중에 코드가 좀 더 길었으면 좋겠다 싶을 때 쓸 것 같아요.

코린느는 어떨지 모르겠습니다.

아직 객체에 대해 배운 것은 없지만 빠른 평가에 유용한 템플릿이라 미리 적어두었습니다.

개체가 가리킬 변수가 null 또는 정의되지 않았는지 확인하고 속성을 참조하십시오.

TypeError는 개체가 가리키는 변수의 값이 null이거나 정의되지 않은 경우에 발생합니다.

이를 방지하기 위한 짧은 평가

var elem = null;
var value = elem && elem.value;

null 또는 정의되지 않은 값을 입력하면 즉시 출력하면 오류가 발생합니다. 따라서 별도의 변수를 설정하여 value가 “true”이면 elem.value를 반환하고 “false”이면 elem을 평가하고 반환합니다.

함수 매개변수의 기본값을 설정할 때

함수를 호출하고 인수를 전달하지 않으면 undefined가 할당되어 오류를 방지합니다.

function getStringLength(str){
    str = str || '';
    return str.length;
}

getStringLength(); //0
getStringLength('hi'); //2

str이 true로 평가되면 str 값을 포함하고 false로 평가되면 빈 문자열을 포함합니다.

이 경우 함수에 아무 것도 쓰지 않으면 빈 문자열이 기본값으로 입력되기 때문에 오류가 발생하지 않고 문자열의 길이가 0으로 출력됩니다.

선택적 연결 연산자

선택적 연결 연산자 ?. 왼쪽 피연산자가 null이거나 정의되지 않은 경우 undefined를 반환하고, 그렇지 않으면 속성 참조를 오른쪽으로 계속합니다.

var elem = null;

var value = elem?.value;
console.log(value); //undefined

결국 형태만 다를 뿐 &&로 약식평가처럼 작동한다.

var elem = null;
var value = elem && elem.value;
console.log(value);

차이점은 무엇입니까?

그들이 얻는 거짓 값에 따라 다릅니다.

논리 연산자는 &&입니다. 값이 false(거짓, 정의되지 않음, null, 0, -0, NaN,”)인 경우 이 피연산자는 변경되지 않은 상태로 반환됩니다.하다.

문제는 0 또는 ”도 반환한다는 것입니다.

우리는 null 및 정의되지 않은 값이 있는 경우에만 오른쪽 값을 반환합니다.나는 그것을 가능하게 하고 싶다.

이 경우 선택적 연결 연산자입니다. false 값에서는 null 및 undefined만 수신되며 그렇지 않은 경우 오른쪽 속성 참조가 계속됩니다.차이가 있습니다.

무효 합체

널 병합 연산자 ?? 왼쪽 피연산자가 null이거나 정의되지 않은 경우 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환합니다..

var a = null ?? 'default string'
console.log(a); //"default string"

선택적 연결 연산자와 유사하게 null 병합 연산자는 변수의 기본값을 설정하는 데 더 유용합니다.

이것을 논리합(||)으로도 사용하고 0, ” 등의 경우가 기본값으로 유효할 경우 예기치 않은 동작이 발생할 가능성이 있으므로 null 병합 연산자가 이를 차단합니다.

var a="" ?? 'default string';
console.log(a); //""

음, ”와 0을 제외하고 null 및 undefined의 경우에만 오른쪽의 기본값을 가집니다.오전.