2016-06-24 5 views
1

방금 ​​Javascript를 배우기 시작했으며 특정 코드에 대해 구체적인 질문이 있습니다. Eclquent Javascript의 4 장에있는 lycanthrope의 로그의 일부입니다. 내 질문의 구체성으로 인해이 질문과 관련된 다른 모든 코드는 포함하지 않았으므로 내 질문에 대답 할 필요가 없다고 생각합니다.indexOf! = -1은 부울을 반환합니까?

이것이 '나쁜 습관'으로 간주되는 경우 알려 주시면 더 많은 배경을 보여주기 위해이 게시물 및/또는 향후 게시물을 기각 해 드리겠습니다.

아래 코드에는 두 번째 줄이 표시됩니다. 지금까지 나는 indexOf가 넘겨지는 것이 무엇이든 그것을 발견 한 경우에만 양수 또는 0을 반환한다는 것을 배웠습니다. 발생이 발견되지 않으면 -1을 반환합니다.

이 경우에는 "= 1과 같지 않음"을 의미하는 것으로 이해되는! = -1이옵니다. 그것은 나에게 분명하다.

내가 완전히 이해하지 못하는 것은 2 행의 실제 반환이 끝나는 것입니다. 부울 값 true 또는 false를 반환합니까? 또는 '이벤트'가있는 실제 색인을 반환합니까?

계속해서 첫 번째 if 문에서 hasEvent 변수가 다시 표시됩니다. 나는 hasEvent (이벤트 항목)가 true 인 경우 인덱스에 1을 추가 "로이 말씀을 읽게.

내가 참으로 부울이 바로 '읽기'와 두 번째 줄에 반환이다 있습니까?

function hasEvent (event, entry) { 
    return entry.events.indexOf(event) != -1; 
} 

function tableFor (event, journal) { 
var table = [0, 0, 0, 0]; 
for (var i=0; i < journal.length; i++) { 
    var entry = journal[i] , index = 0; 
    if (hasEvent(event, entry)) index += 1; 
    if (entry.squirrel) index += 2; 
    table [index] += 1; 
} 
return table; 
} 

는 당신의 도움을 주셔서 감사합니다 나는 다르게이 문제를 언급해야하는 경우 제발 말해! 내가 이동하기 전에 내가 일을 이해하도록 노력하고 있어요!

+0

비교 결과를 반환하며 이는 부울입니다. – pawel

+0

['typeof (indexOf()! = -1)'] (https://developer.mozilla.org/en/US/docs/Web/JavaScript/Reference/Operators/typeof) –

답변

4

예프. hasEvent에서 부울을 반환 ===, ==, !, !==, !=, >, >=, 부울 표현 < 또는 <= 결과를 사용.

6

항상 부울 결과가있는 != 연산자.

return 문 다음에 표현식이 오는 경우 표현식의 값을 반환하므로 해당 함수의 반환 값은 true 또는 false입니다.

+0

더 나은'! = ='및'==='. – Tushar

+0

@Tushar이 경우에는'.indexOf()'가 항상 숫자를 반환하기 때문에 차이가 없다. – Pointy

+0

그 설명에 감사드립니다. 그러면 논리적으로 첫 번째 if 문은 hasEvent 값이 true로 되돌아 왔을 때 실제로 1을 더하게됩니까? –

1

Comparison operators은 모두 부울 값으로 평가됩니다.

이 코드가 특별히하는 것은 함수 이름 뒤에 비교를 추상화하는 것입니다. 값을 결과로 가져 오는 연산이나 연산 집합은 그 값을 반환하는 함수에 넣을 수 있습니다. 이렇게하면 함수의 이름이 수행되는 작업에 직관적 인 의미를 부여 할 수 있으므로 코드를 더 읽기 쉽고 이해하기 쉽게 만드는 일반적인 리팩토링입니다.

이 같은

그래서 대신 뭔가 :

if (a == b) { 

} 

당신이 할 수 있습니다 :

if (someCondition(a, b)) { 

} 

그래서 당신이 (물론 someCondition보다 더 많은 의미)의 동작에 의미있는 이름을 줄 수 있습니다 . 이 함수가 대체하는 코드와 동일한 값을 반환하면 논리적으로 차이는 없습니다.