JScript의 수많은 연산자 중에서 &&, ||, ! 세 가지 논리 연산자를 제공하는데, 아 고급 언어군요! . 논리 연산에 대한 우리의 일반적인 이해에 따르면 논리 연산의 결과는 참이거나 거짓이어야 합니다. 그러나 JScript의 논리 연산은 항상 true|false를 반환하는 ! 연산자만 있으며 || 및 && 연산이 더 재미있습니다.
JScript의 논리 연산에 대한 true|false 정의는 다음과 같습니다.
모든 개체는 true로 간주됩니다.
문자열은 비어 있는 경우("" 또는 '')에만 false로 간주됩니다.
null 및 정의되지 않음은 false로 간주됩니다.
숫자는 0인 경우에만 거짓입니다.
그러나 논리 연산자 || 및 &&는 위의 정의 규칙을 따르지만 이들이 반환하는 값은 매우 흥미롭습니다.
&& 연산의 경우 위 규칙에 따라 표현식 if ('abc' && '123' && new Date() )는 실제 분기를 실행하지만 이 표현식이 다음과 같이 작성되면:
var 값 = 'abc' && ' 123' && new Date();
결과 값= Fri Jan 21 00:01:17 UTC 0800 2005. 원래는 왼쪽에서 오른쪽으로 확인했습니다. 마지막 표현식도 true이면 해당 표현식이 반환됩니다.
다음 표현식의 || 작업에도 동일하게 적용됩니다.
var value1 = 'abc' || '123' || null || false; 결과 값1='abc', 값2='확인'. || 연산에는 "단락" 특성이 있기 때문입니다. 또한 왼쪽에서 오른쪽으로 테스트하지만 참값을 찾는 즉시 표현식을 반환합니다.
var 값2 = null || ''||거짓 🎜>
이러한 기능은 효율적인 코드 작성에 도움이 되지만 코드를 읽고 유지 관리하기가 쉽지 않다는 문제도 발생합니다.
NS나 moz 같은 브라우저가 없어서 표준 자바스크립트도 이런 식으로 지원이 되는지 궁금합니다. 편하신 경우 실행 후 결과를 알려주세요.
JScript에서 이러한 논리 연산은 모두 표현식이 "의미 있는"지 여부를 결정하는 데 사용됩니다.
예: 0, "", null, false, 정의되지 않음, NaN... 등. 의미 없음..
&&는 true 또는 false를 반환합니다.
a||b는 a가 의미 있으면 a를 반환하고, 그렇지 않으면 b를 반환합니다.
그래서 가끔은 그렇지 않습니다. 다음과 같은 코드를 작성하지 마세요:
var obj=QuerySomeObject();
if(obj==null)return null;
return obj.Property;
> return (QuerySomeObj()||{}).Property;
또한, null과 false의 비교에 주의하세요.
==와 비교할 때 ""와 false는 모두 동일합니다. >
하지만 null은 다릅니다. 예를 들어
if(!null)
{
alert(1)
}
if(null==false)
{
alert(2);
}
Firefox에서 테스트한 결과는 동일합니다!