JavaScript에서 문자열 간의 동등성을 확인하는 올바른 방법은 무엇입니까?
{} == "[object Object]"
예를 들어 true로 평가 되기 때문 입니다.
String().equals()
JS의 방법이 아닌 다소 성가신 ...
JavaScript에서 문자열 간의 동등성을 확인하는 올바른 방법은 무엇입니까?
{} == "[object Object]"
예를 들어 true로 평가 되기 때문 입니다.
String().equals()
JS의 방법이 아닌 다소 성가신 ...
답변:
항상==
and===
연산자를 사용하는것의 차이점과 의미를 완전히 이해하기 전에는연산자를 사용하십시오===
. "일반"==
연산자는 내부적으로 유형 강제로 인해 예상치 못한 결과를 초래할 수 있으므로===
항상 사용하는 것이 좋습니다.
이것에 대한 통찰력과 Javascript의 다른 "좋은 대 나쁜"부분은 Douglas Crockford 씨와 그의 연구에서 읽었습니다. 훌륭한 Google Tech Talk에서 유용한 정보를 많이 요약합니다. http://www.youtube.com/watch?v=hQVTIJBZook
최신 정보:
Kyle Simpson 의 You Do n't Know JS 시리즈는 훌륭하며 온라인에서 무료로 읽을 수 있습니다. 이 시리즈는 일반적으로 잘못 이해되는 언어 영역으로 들어가며 Crockford가 제안한 "나쁜 부분"을 설명합니다. 그것들을 이해함으로써 당신은 그것들을 올바르게 사용하고 함정을 피할 수 있습니다.
" Up & Going "책에는 Equality에 대한 섹션이 포함되어 있으며 느슨한 ( ==
) 대 엄격한 ( ===
) 연산자 를 사용하는시기를 구체적으로 요약합니다 .
몇 가지 간단한 테이크 아웃에 대한 자세한 내용을 요약하고 사용 여부
==
또는===
다양한 상황에서 알 수 있도록 도와주는 간단한 규칙은 다음과 같습니다.
- 비교에서 값 (일명 측면)이
true
또는false
값일 수있는 경우 피하고==
사용하십시오===
.- 비교에서 하나의 값이 특정 값 (이 될 수 있다면
0
,""
또는[]
피 - 빈 배열)==
사용===
.- 에서 모든 다른 경우, 넌 안전 사용합니다
==
. 안전 할뿐만 아니라 대부분의 경우 가독성을 향상시키는 방식으로 코드를 단순화합니다.
Javascript를 실제로 이해하기 위해 시간을 투자하고 싶지 않은 개발자를위한 Crockford의 강연은 여전히 권장합니다. Javascript로 가끔 일하는 개발자에게는 좋은 조언입니다.
if (typeof foo == "string")
===
연산자를 사용하는 것이 훨씬 낫고 " ==
내가 생각하는 방식대로 행동 할 것이라고 정말로 100 % 확신하고 있습니까?"
++
/ --
) 를 사용하지 않는 충고 입니다.
++
또는 --
한 줄 또는 if/else
진술 또는 continue
또는 new
운영자 또는 크록 포드는 "유해한"것으로 간주 것을 완벽하게 합법적 인 코드 관행의 다른 수를. 물론 결코 이제까지 도 사용에 대한 생각을 고려하지 eval
또는 with
자신의 함정을 잘 이해하는 경우에도 마찬가지입니다. 그리고 JS의 다음 버전을 보셨습니까? 몇 년 동안 떠 다니는 더 엄격한 구문과 소수의 도우미 함수는이 모든 시간 후에 얻을 수있는 모든 것입니다. 구문은 전혀 발전하지 않았습니다. Crockford가 이것 뒤에 있다면, 그것은 나쁜 일이었습니다.
문자열이라는 것을 알고 있다면 타입을 확인할 필요가 없습니다.
"a" == "b"
그러나 문자열 객체는 동일하지 않습니다.
new String("a") == new String("a")
거짓을 반환합니다.
valueOf () 메소드를 호출하여 String 오브젝트의 기본 요소로 변환하십시오.
new String("a").valueOf() == new String("a").valueOf()
사실을 반환합니다
new String("a") == "a"
true입니다 (그러나는 포함되지 않음 ===
).
new String("a") == new String("a")
, new String("a") === new String("b")
, new String("a") === new String("a")
모든 반환 false
, 당신은의 객체에 대한 참조를 처리하고 이후 String
클래스 유형이 아닌 프리미티브 string
.
new String(foo)
문자열 생성 객체를 , 그리고 String(foo)
변환은 원시 문자열로 foo는.
대답에 한 가지 추가 사항 :이 방법이 모두 false를 반환하면 문자열이 같더라도 한 문자열의 왼쪽 및 오른쪽에 공백이있을 수 있습니다. 따라서 .trim()
비교하기 전에 문자열 끝에 a 를 넣으십시오 .
if(s1.trim() === s2.trim())
{
// your code
}
무엇이 잘못되었는지 알아 내려고 시간을 잃었습니다. 이것이 누군가에게 도움이되기를 바랍니다!
fetch
). 고마워
어떤이 질문에 나를 인도하는 인 padding
및white-spaces
내 사건을 확인
if (title === "LastName")
doSomething();
제목은 " LastName"
그래서 아마도 당신은
trim
이와 같은 기능 을 사용해야 할 것입니다
var title = $(this).text().trim();
.toString().trim()
. Typescript에서 사용한
강제 변환의 작동 방식을 실제로 알지 못하는 경우 대신 ==
ID 연산자 ===
를 사용 하지 않아야 합니다. 그러나 어떻게 작동하는지 이해하려면 이것을 읽어야합니다 .
을 사용 ==
하면 언어가 어떤 유형의 강제 변환을 수행하게합니다. 예를 들면 다음과 같습니다.
"1" == 1 // true
"0" == false // true
[] == false // true
Douglas Crockford가 그의 책에서 말한 것처럼 :
항상 ID 연산자를 사용하는 것이 좋습니다.
{}==" "
내가 준 Unexpected token ==
을 할 수있는 올바른 방법을 뭐죠?
실제로 자바 스크립트에서 문자열을 만들 수있는 두 가지 방법이 있습니다.
var str = 'Javascript';
이것은 기본 문자열 값을 만듭니다.
var obj = new String('Javascript');
이렇게하면 유형의 래퍼 객체가 생성 String
됩니다.
typeof str // string
typeof obj // object
따라서 동등성을 확인하는 가장 좋은 방법은 ===
연산자를 사용하는 것입니다. 연산자는 값과 두 피연산자의 유형을 모두 검사하기 때문입니다.
두 객체 사이의 동등성을 확인 String.prototype.valueOf
하려면 올바른 방법 을 사용 하십시오.
new String('javascript').valueOf() == new String('javascript').valueOf()
가장 쉬운 방법은 다음과 같이 삼항 연산자를 사용하는 것입니다.
"was" == "was" ? true : false
그러나 비교하려는 문자열이 배열에 있으면 es6 필터를 사용합니다
let stringArray = ["men", "boys", "girls", "sit", "can", "gotten"]
stringArray.filter(I=> I === boys ?
stringArray.pop(indexOf(I)) : null)
위는 stringArray와 배열에서 일치하는 문자열을 확인합니다.이 경우 "boys"를 선택했습니다.
테스트하는 동안 대체 솔루션을 생각해 냈습니다. 문자열 프로토 타입에서 함수를 사용할 수 있습니다.
String.prototype.betwenStr = function(one){
return JSON.stringify(new String(this)) === JSON.stringify(new String(one));
}
//call it
"hello world".betweenStr("hello world"); //returns boolean
//value
크롬 브라우저에서 잘 작동합니다
==
.