2017-09-09 2 views
0

React 프로젝트에서 현재 min 및 max를 사용하여 가격별로 데이터를 필터링하고 있습니다. 내 최대 가격에서 조건부 나는 최대 가격이 비어 있는지 확인 아니면 현재의 데이터에 대한 가격이 1000에서 문자열이 300 인 문자열이 Javascript에서 false를 반환하는 이유는 무엇입니까?

(!this.state.max_price.trim() || listing.price <= this.state.max_price) 
내가위한 최대 가격을 입력 할 때 작동 것으로 나타났습니다 필터를 통과 할 수 있는지 확인하지 않을 경우 1000을 초과하지 않는 모든 숫자가 있지만 1000 이상의 숫자가 입력되면 실패하고 false를 반환하므로 jsfiddle의 조건부를 테스트하여 누락 된 부분이 있는지 확인합니다. 나는 예상치 못한 결과

// I put this in jsfiddle, and it returned false 
if ("300" <= "1000") { 
    alert('true') 
} else { 
    alert('false') 
} 
있어 아래 나는 또한 jsfiddle 아래이 코드를 넣어 (위하지 1000 그것을 1000 아래 숫자 노력하고 있습니다 볼 수 있지만 수)

내가 예상했던 결과와 만났다

// I put this in jsfiddle, and it returned false 
if ("300" <= "500") { 
    alert('true') 
} else { 
    alert('false') 
} 

답변

3
당신이 문자열을 비교하는

하고, "300", "1000"

console.log("300" < "1000"); 
 
console.log(300 < 1000);

보다 lexographically 큰
+0

와우 와우 와우 와우 –

+1

가에서는 parseInt를 (사용하여 숫자로 변환) – marvel308

+0

는 그것이에서는 parseInt를 사용하는 것이 좋습니다 :
당신은 단항 + oprator +"1" => 1를 사용하여 번호를 문자열 변수를 변환 할 수 있습니다() 또는 Number()? –

1

JavaScript의 문자열 비교 (대부분의 언어)에서 문자열은 ASCII 값으로 비교되며 "3" (51)의 ASCII 값은 "1" (49) 51>49이므로 "300">"1000"의 ASCII 값보다 큽니다.

var a = "300"; 
 
var b = "1000"; 
 
if (a <= b) { 
 
    console.log('true') 
 
} else { 
 
    console.log('false') 
 
} 
 
a = +a; // convert to number using the unary '+' operator 
 
b = +b; 
 
if (a <= b) { 
 
    console.log('true') 
 
} else { 
 
    console.log('false') 
 
}

관련 문제