MEAN 스택 프로젝트의 일부로 Node.JS의 사전 객체로 작업하는 동안 이상한 동작이 발생했습니다.자바 스크립트 사전 키가 조건문 내에 있습니다.
keywordSearches
사전을 코드에 정의하고 searches
은 keyword
속성을 포함하는 Search
개체의 배열입니다. 필자는 기본적으로 MongoDB에서 내 모든 검색 요청 레코드를 가져온 다음 키가 검색 텍스트이고 키워드 검색 빈도가 포함 된 사전을 만들고 값은 검색되는 빈도 (정수)입니다. . 이 모든 것은 keywordSearches
에 저장됩니다.
그러나 다음 코드를 사용하여 검색을 반복 할 때 keywordSearches
키워드는 my if 조건 외부에서 false로 평가되지만 if 조건 (매우 다음 행)에서 true로 평가됩니다. . 이것은 왜 발생 하는가?
console.log(keywordSearches);
for (var i = 0; i < searches.length; i++){
var keywords = searches[i].searchBody.keywords;
console.log(keywords in keywordSearches); // <- this evaluates to false
if (!keywords in keywordSearches){ // <- this section of code never executes! Why?
console.log("New keyword found")
keywordSearches[keywords] = 1;
} else {
keywordSearches[keywords] = keywordSearches[keywords] + 1;
console.log("else statement")
}
}
console.log(keywordSearches);
출력 (주, 나는 키워드 "사진"네 개의 Search
객체 모두를 가지고 :
{} <- console.log(keywordSearches)
false <- (keywords in keyWord Searches)
else statement <- if condition evaluates to false! Should evaluate to true. Why?
true
else statement
true
else statement
true
else statement
true
else statement
{ photography: NaN }
내가 photography
이 NaN
이유를 이해한다. 그것은 1
의 값으로 초기화 결코 (처음에 사전에없는 경우 해당 단어가 포함되어야 함). 따라서 매번 NaN
+1이 추가됩니다.
이것은 운영자 우선 순위 문제 일 수 있습니다. if 문에 괄호를 추가하십시오! (키워드는 keywodSearches에 있음) – doze