거짓 값 대 null, 정의되지 않은 또는 빈 문자열


11

몇 년 동안 jQuery와 함께 일해 왔습니다. 그러나 최근에 JavaScript 언어에 대해 더 깊이 알게되었습니다. 최근에 나는 "거만한"값과 거짓된 값에 대해 들었습니다. 그러나 나는 그것들을 완전히 이해하지 못합니다. 현재 다음과 같은 코드가 있습니다.

var fields = options.fields || ['id', 'query'];

필드가 null인지, 정의되지 않았는지, 길이가 0인지 확인해야합니다.

if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
 ...                    
}

내 질문은 다음과 같습니다.

if (!fields)  {
 ...
}

답변:


23

프로그래밍에서 진실성 또는 허위성 (falsiness)은 실제 부울 값으로 해석되지 않지만 그럼에도 불구하고 부울 결과로 해석되는 부울 표현식의 품질입니다.

C의 경우 0으로 평가되는 모든 표현식은 false로 해석됩니다. 자바 스크립트 value에서

if(value) {
}

그렇지 않은 경우 true로 평가됩니다 value.

null
undefined
NaN
empty string ("")
0
false

참조
, 널 (null)을 확인하는 표준 기능이 거기에 정의되지 않은, 또는 자바 스크립트를 빈 변수?


9

JavaScript에서 "truthy"및 "falsey"값 세트는 ToBooleanECMAScript spec에 정의 된 추상 조작 에서 비롯되며, 값을 부울로 강제 변환 할 때 사용됩니다.

+--------------------------------------------------------------------------+
| Argument Type | Result                                                   |
|---------------+----------------------------------------------------------|
| Undefined     | false                                                    |
|---------------+----------------------------------------------------------|
| Null          | false                                                    |
|---------------+----------------------------------------------------------|
| Boolean       | The result equals the input argument (no conversion).    |
|---------------+----------------------------------------------------------|
| Number        | The result is false if the argument is +0, 0, or NaN;   |
|               | otherwise the result is true.                            |
|---------------+----------------------------------------------------------|
| String        | The result is false if the argument is the empty String  |
|               | (its length is zero); otherwise the result is true.      |
|---------------+----------------------------------------------------------|
| Object        | true                                                     |
+--------------------------------------------------------------------------+

이 표에서, 우리는 볼 수 있습니다 nullundefined모두에 강요하는 false부울 맥락에서. 그러나 fields.length === 0일반적으로 잘못된 값으로 매핑되지는 않습니다. fields.length문자열 인 경우 false길이가 0 인 문자열 로 간주되므로 문자열로 처리 false되지만 객체 (배열 포함) 인 경우로 처리됩니다 true.

fields문자열이어야 한다면 !fields충분한 술어입니다. fields배열 인 경우 최선의 점검은 다음과 같습니다.

if (!fields || fields.length === 0)

2

짧은 답변:

아니요 , 동일하지 않습니다.

하지만 이것은:

if (!fields) { ... }

이것과 같습니다

if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}

길고 더 나은 답변 :

먼저 진실되고 허위적인 가치에 대해 이야기합시다.

부울로 무언가를 평가할 때 일어나는 일에 관한 것입니다. JavaScript에서 이것은 if명령문 과 같은 것을 사용할 때 발생 합니다. 논리 연산자 좋아 ||, !또는 &&; 또는 Boolean()기능.

Boolean()함수는 값 반환하거나 수용 true또는 false.

예를 들어 :

var age = 1; // Let's evaluate age as a boolean Boolean(age); // true

계속해서 노드 repl에서 시도하십시오.

부울 만 할 수 있습니다 true또는 false의 반환 값이 있도록 Boolean() 해야한다 일 수 true또는 false. 이 경우, 우리는 value를 전달했으며 1부울로 평가 될 때 1is true입니다.

중요 사항 : 부울로 평가되는 경우 값은 true 또는 false 여야합니다. 그것들은 유일한 두 가지 옵션입니다.

JavaScript에는 6 개의 잘못된 값만 있습니다. false부울로 평가 될 때의 값입니다. 그들은이다 : false, 0, "", null, undefined,와 NaN. 따라서 이러한 값 중 하나라도 부울로 평가되면 false입니다.

Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false

이는 JavaScript에서 다른 값 true은 부울로 평가 될 때임을 의미합니다. 따라서 JavaScript의 다른 모든 가치는 진실합니다.

무언가를 평가하는 또 다른 쉬운 방법 boolean!연산자 를 사용하는 것 입니다. Boolean함수 와 마찬가지로 값을 부울로 평가합니다. 그러나 진실한 가치관이 false되고 거짓된 가치관이 true됩니다.

!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true

다시, 노드 repl 또는 이해하기 위해 무언가를 사용해보십시오.

따라서이 진술 :

if (!fields) { ... }

" fields부울로 평가 될 때 false 인 경우이 if 문에서 코드를 실행하십시오."

첫 번째 진술은 다음과 같습니다.

var fields = options.fields || ['id', 'query'];

논리 OR 연산자를 사용하고 있으며 이해하기 위해 읽을 가치가 있습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators


0

귀하의 코드는 다음을 의미합니다.

var fields;
if (options.fields)
    fields = options.fields;
else
    fields = ['id', 'query'];

이제 options.fields부울 값으로 변환됩니다. 정의에 의하면 null, undefined, 0, ""로 변환되고 false, 다른 사람 (대부분) 아무것도가 변환됩니다 true(하지만 난 그렇게 정확하지 않습니다).

fields.length === 0선 때문에 동일하지 않습니다 . 빈 배열과 다른 객체는로 변환됩니다 true.

참고 : Javascript는 때때로 큰 혼란입니다 ... 예를 들어 2 가지 유형 검사 연산자 (typeof 및 instanceof)가 필요하지 않습니다. true instanceof Boolean작동하지 않을 때 ppl을 혼란스럽게 하고 typeof(true) == "boolean"자동 완성없이 문자열을 입력하기 때문에 오류가 발생하기 쉽습니다. 어쩌면 일부 새로운 버전에서는 이러한 문제가 해결 될 것입니다.


-1

fields 요소가 null이거나 정의되지 않았거나 길이가 0이면 (!! fields) 시도하면 true를 반환합니다. 또는 (!!! 필드) 그러면 true를 반환합니다.

두배 ! 또는 !! 참 또는 거짓을 강제합니다. 나는 이것에 대한 좋은 정의를 찾을 수 있기를 원하지만 다시 찾을 수없는 것 같습니다.


1
"!!!" 와 같다 "!" "!!!!!"그대로 그리고 "!!!!!!!". 값을 "노트"하면 무언가가 진실하거나 허위라는 것을 확인하는 데 사용될 수 있습니다. 즉, 진실하거나 거짓된 가치는 정확히 무엇입니까?
Jeffrey Sweeney

not 연산자를 더 잘 설명하는 기사를 찾았습니다 : bennadel.com/blog/… developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 조건을 부울 값으로 바꿉니다 .
랜디 콜리어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.