programing

JavaScript에서는 큰따옴표와 작은따옴표가 서로 호환됩니까?

codeshow 2023. 4. 17. 22:08
반응형

JavaScript에서는 큰따옴표와 작은따옴표가 서로 호환됩니까?

다음 두 가지 대안을 고려해 보십시오.

  • console.log("double");
  • console.log('single');

전자는 문자열 주위에 큰따옴표를 사용하고 후자는 문자열 주위에 작은따옴표를 사용합니다.

문자열을 처리할 때 작은 따옴표를 사용하는 JavaScript 라이브러리가 점점 더 많아지고 있습니다.

이 두 가지 용도는 서로 교환할 수 있습니까?그렇지 않은 경우 하나를 다른 하나보다 사용하는 데 이점이 있습니까?

다른 라이브러리에서 싱글과 더블을 사용하는 가장 가능성이 높은 이유는 프로그래머의 선호도 및/또는 API의 일관성입니다.일관성이 있을 뿐만 아니라 문자열에 가장 적합한 것을 사용하십시오.

다른 유형의 인용문을 리터럴로 사용하는 경우:

alert('Say "Hello"');
alert("Say 'Hello'");

이 문제는 복잡해질 수 있습니다.

alert("It's \"game\" time.");
alert('It\'s "game" time.');

ECMAScript 6에서 새롭게 추가된 또 다른 옵션은 backtick 문자를 사용하는 템플릿리터럴입니다

alert(`Use "double" and 'single' quotes in the same string`);
alert(`Escape the \` back-tick character and the \${ dollar-brace sequence in a string`);

템플릿 리터럴은 변수 보간, 다중 행 문자열 등에 대한 명확한 구문을 제공합니다.

JSON은 이중 따옴표를 사용하도록 정식으로 지정되어 있으므로 시스템 요건에 따라 고려할 필요가 있습니다.

JSON을 취급하는 경우는 엄밀하게 말하면 JSON 문자열은 이중 따옴표로 묶어야 합니다.물론 많은 라이브러리가 단일 인용문을 지원하지만, 단일 인용문이 실제로는 JSON 표준에 부합하지 않는다는 것을 깨닫기 전에 프로젝트 중 하나에서 큰 문제가 발생했습니다.

보다 더 좋은 해결책은 없습니다만, 때때로 큰따옴표가 더 바람직할 수 있습니다.

  • 새로사람들은 이미 그들 언어의 이중 따옴표를 잘 알고 있을 것이다.영어에서는 큰따옴표를 사용해야 합니다."인용된 텍스트의 구절을 식별합니다.'할 수 있습니다 주위에 의 다른 입니다.'의 의미를 직접'의 의미를 나타냅니다.기존 언어와 일관성을 유지하는 것이 타당하며, 이를 통해 코드 학습과 해석이 쉬워질 수 있습니다.
  • 큰따옴표를 사용하면 (축소와 같이) 아포스트로피를 피할 필요가 없어집니다.다음 문자열을 고려합니다."I'm going to the mall" 이스케이프된: , " " " " " " 와 합니다.'I\'m going to the mall'.
  • 큰따옴표는 많은 다른 언어로 된 문자열을 의미합니다.자바나 C와 같은 새로운 언어를 배울 때는 항상 큰따옴표를 사용합니다.Ruby, PHP 및 Perl에서는 단일 따옴표로 묶인 문자열은 백슬래시 이스케이프가 없음을 의미하며 이중 따옴표는 이들을 지원합니다.

  • JSON 표기법은 큰따옴표로 작성됩니다.

그럼에도 불구하고, 다른 사람들이 말했듯이, 일관성을 유지하는 것이 가장 중요하다.

사양 섹션 7.8.4는 리터럴 문자열 표기법에 대해 설명합니다.유일한 차이점은 DoubleStringCharacter는 "SourceCharacter but double-quote"이고 SingleStringCharacter는 "SourceCharacter but single-quote"입니다.따라서 유일한 차이는 다음과 같이 입증할 수 있습니다.

'A string that\'s single quoted'

"A string that's double quoted"

따라서 얼마나 많은 견적을 내고 싶은지에 따라 달라집니다.큰따옴표로 묶인 문자열의 큰따옴표에도 동일하게 적용됩니다.

그 차이는 순전히 스타일상이라고 말하고 싶지만, 나는 정말 의심이 든다.다음 예를 생각해 보겠습니다.

/*
    Add trim() functionality to JavaScript...
      1. By extending the String prototype
      2. By creating a 'stand-alone' function
    This is just to demonstrate results are the same in both cases.
*/

// Extend the String prototype with a trim() method
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
};

// 'Stand-alone' trim() function
function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
};

document.writeln(String.prototype.trim);
document.writeln(trim);

Safari, Chrome, Opera 및 Internet Explorer(Internet Explorer 7 및 Internet Explorer 8에서 테스트됨)에서는 다음을 반환합니다.

function () {
    return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

그러나 Firefox의 결과는 약간 다릅니다.

function () {
    return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, "");
}

작은 따옴표는 큰 따옴표로 대체되었습니다.(또한 들여쓰기 공간은 4개의 공간으로 대체되었습니다).이것은 적어도 하나의 브라우저가 JavaScript를 내부에서 해석하는 것처럼 보이게 합니다.모든 것이 이미 이 '표준'에 따라 작성되어 있다면 파이어폭스가 JavaScript를 구문 분석하는 데 걸리는 시간이 줄어들 것이라고 생각할 수도 있습니다.

그건 그렇고, 내가 아주 슬픈 팬더라는 건 작은 따옴표 하나가 더 잘 어울리거든또한 다른 프로그래밍 언어에서는 보통 큰따옴표보다 사용하기 빠르기 때문에 JavaScript에도 동일한 내용이 적용될 경우에만 의미가 있습니다.

결론:우리는 이것에 대해 좀 더 연구해야 할 것 같아요.

그래서 2003년 피터 폴 코흐의 검사 결과가 설명될지도 모른다.

탐색기 Windows에서 작은 따옴표가 더 빠른 경우가 있는 것 같습니다(내 테스트의 1/3이 더 빠른 응답 시간을 나타냈습니다). 그러나 Mozilla가 조금이라도 차이를 보이면 큰 따옴표를 조금 더 빠르게 처리합니다.나는 오페라에서 전혀 다른 점을 발견하지 못했다.

2014: 최신 버전의 Firefox/Spidermonkey에서는 더 이상 이 기능이 제공되지 않습니다.

인라인 JavaScript(논의상으로는 "나쁜" 일이지만 논의를 피하는 것)를 하고 있다면 스트링 리터럴에 대한 유일한 옵션은 작은 따옴표라고 생각합니다.

예: 이 기능은 정상적으로 동작합니다.

<a onclick="alert('hi');">hi</a>

하지만 제가 아는 탈출 방법으로는 "안녕"을 큰따옴표로 묶을 수 없습니다.파이어폭스에서는 (HTML 속성값으로 따옴표를 회피하고 있기 때문에) 아무리 생각해도 통하지 않습니다.이 시점에서는 JavaScript가 아닌 HTML을 위해 도망치고 있기 때문입니다.

게임의 이름이 일관성이고 애플리케이션의 일부에서 인라인 JavaScript를 실행할 경우 작은 따옴표가 승자라고 생각합니다.제가 틀렸다면 정정해 주세요.

엄밀히 따지면 차이가 없다.그것은 단지 스타일과 관습의 문제일 뿐이다.

Douglas1 Crockford는 큰따옴표를 사용할 것을 권장합니다.

나는 개인적으로 그것을 따른다.

엄밀히 말하면, 의미에 차이가 없기 때문에, 선택은 편리함에 달려 있다.

다음은 선택에 영향을 줄 수 있는 몇 가지 요인입니다.

  • House style: 일부 개발자 그룹은 이미 하나의 컨벤션 또는 다른 컨벤션을 사용하고 있습니다.
  • 클라이언트 측 요건:문자열 안에 따옴표를 사용하시겠습니까?(Ady의 답변을 참조하십시오.)
  • 서버측 언어: VB.NET 사용자는 스크립트를 서버측(VB)으로 빌드할 수 있도록 JavaScript에 단일 따옴표를 사용할 수 있습니다.NET에서는 문자열에 큰따옴표를 사용하기 때문에 JavaScript 문자열은 작은따옴표를 사용하면 쉽게 구분할 수 있습니다).
  • 라이브러리 코드:특정 스타일을 사용하는 라이브러리를 사용하는 경우, 동일한 스타일을 사용하는 것을 고려할 수 있습니다.
  • 개인 취향:어떤 스타일이 더 보기 좋다고 생각하실 수도 있습니다.

사용하는 것에 일관성을 유지하세요.하지만 당신의 편안함을 떨어뜨리지 마세요.

"This is my string."; // :-|
"I'm invincible."; // Comfortable :)
'You can\'t beat me.'; // Uncomfortable :(
'Oh! Yes. I can "beat" you.'; // Comfortable :)
"Do you really think, you can \"beat\" me?"; // Uncomfortable :(
"You're my guest. I can \"beat\" you."; // Sometimes, you've to :P
'You\'re my guest too. I can "beat" you too.'; // Sometimes, you've to :P

ECMAScript 6 업데이트

템플릿 리터럴 구문 사용.

`Be "my" guest. You're in complete freedom.`; // Most comfort :D

뻔한 말을 덧붙이는 게 아니길 바라지만, 장고, 아약스, JSON과 고민하고 있습니다.

HTML 코드에서 보통 그렇듯이 큰따옴표를 사용한다고 가정하면 자바스크립트에서는 나머지 부분에 작은따옴표를 사용하는 것이 좋습니다.

그래서 나는 ady에 동의하지만, 약간의 주의를 기울인다.

결론은 다음과 같습니다.

JavaScript 에서는 아마 상관없을 것입니다만, HTML 등에 삽입하면 트러블이 생기기 시작합니다.실제로 탈출하고, 읽고, 전달하고 있는 것이 무엇인지 알아야 합니다.

제 간단한 사례는 다음과 같습니다.

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="/this/thislist/'
                   + myThis[i].pk +'"><img src="/site_media/'
                   + myThis[i].fields.thumbnail +'" height="80" width="80" style="float:left;" onmouseover="showThis('
                   + myThis[i].fields.left +','
                   + myThis[i].fields.right +',\''
                   + myThis[i].fields.title +'\')"></a><p style="float:left;width:130px;height:80px;"><b>'
                   + myThis[i].fields.title +'</b> '
                   + myThis[i].fields.description +'</p></div>'

showThis의 세 번째 필드에서 를 확인할 수 있습니다.

이중 따옴표가 작동하지 않았어요!

이유는 분명하지만 왜 우리가 작은 따옴표를 고집해야 하는지도 분명합니다.내 생각엔...

이 케이스는 매우 단순한 HTML 임베딩으로, 에러는 '더블 따옴표로 묶인' JavaScript 코드에서 단순한 복사/붙여넣기 때문에 발생합니다.

질문에 답하려면:

HTML 내에서 작은 따옴표를 사용합니다. 그러면 몇 가지 디버깅 문제가 저장될 수 있습니다.

그것은 대부분 스타일과 선호도의 문제이다.다른 답변에는 다소 흥미롭고 유용한 기술 탐색이 몇 가지 있기 때문에, 제가 덧붙일 수 있는 것은 약간의 세속적인 조언을 하는 것뿐입니다.

  • 회사나 팀에서 코드 작업을 하고 있다면 "하우스 스타일"을 따르는 것이 좋을 것입니다.

  • 만약 당신이 몇 개의 부업 프로젝트를 해킹하고 있다면, 지역사회의 몇몇 저명한 리더들을 살펴보세요.예를 들어 Node.js에 접속한다고 합니다.Underscore.js나 express와 같은 핵심 모듈을 살펴보고 어떤 규칙을 사용하는지 확인한 후 이를 따르는 것을 고려해 보십시오.

  • 가지 규칙이 모두 동일하게 사용되는 경우, 자신의 취향에 따르세요.

  • 만약 당신이 개인적인 선호가 없다면 동전을 던져라.

  • 동전이 없으면 맥주는 가 살게요;)

이것이 오늘날의 세계와 관련이 있는지는 잘 모르겠지만, 이전에는 제어 문자를 처리해야 하는 컨텐츠에 큰따옴표를 사용하고 그렇지 않은 문자열에는 작은따옴표를 사용했습니다.

컴파일러는 이중 따옴표로 묶인 문자열에 대해 문자열 조작을 실행하지만 따옴표로 묶인 문자열은 그대로 둡니다.이 ' 제어 따옴표를 .\n ★★★★★★★★★★★★★★★★★」\0(작은따옴표로 처리되지 않음) 및 큰따옴표로 해석해야 할 경우(스트링 처리에 CPU 사이클로 약간의 비용이 소요됩니다).

JSHint를 사용하는 경우 이중 따옴표로 묶인 문자열을 사용하면 오류가 발생합니다.

Angular JS의 Yooman scapletlolding을 통해 사용했지만, 어떤 식으로든 설정할 수 있는 방법이 있을지도 모릅니다.

참고로 HTML을 JavaScript로 취급할 때는 작은 따옴표를 사용하는 것이 더 쉽습니다.

var foo = '<div class="cool-stuff">Cool content</div>';

또한 적어도 JSON은 문자열을 나타내기 위해 큰따옴표를 사용합니다.

당신의 질문에 대답할 수 있는 사소한 방법은 없습니다.

JavaScript에서는 싱글 따옴표와 더블 따옴표 사이에 차이가 없습니다.

사양은 중요합니다.

성능 차이가 있을 수 있지만, 그것들은 절대적으로 최소이며 브라우저의 구현에 따라 언제든지 변경될 수 있습니다.JavaScript 어플리케이션의 길이가 수십만 행이 아니면 더 이상의 논의는 무의미합니다.

이것은 벤치마크와 같다.

a=b;

보다 빠르다

a = b;

(스페이스 표시)

현재 특정 브라우저 및 플랫폼 등에서 사용되고 있습니다.

장점과 단점을 조사하다

작은 따옴표 사용

  • 시각적 혼란이 적습니다.
  • HTML 생성: HTML 속성은 보통 큰따옴표로 구분됩니다.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
However, single quotes are just as legal in HTML.

elem.innerHTML = "<a href='" + url + "'>Hello</a>";

또한 인라인 HTML은 일반적으로 안티 패턴입니다.템플릿을 선호합니다.

  • JSON 생성: JSON에는 큰따옴표만 사용할 수 있습니다.

myJson = '{ "hello world": true }';

다시 말씀드리지만 JSON을 이렇게 구축할 필요는 없습니다.대부분의 경우 JSON.stringify()로 충분합니다.그렇지 않은 경우 템플릿을 사용합니다.

큰따옴표 선호

  • 복식은 색 구분 없이 발견하기 쉽습니다.콘솔 로그나 뷰 소스 설정 같은 거요
  • 다른 언어와의 유사성:셸 프로그래밍(Bash 등)에서는 단일 따옴표로 둘러싸인 문자열 리터럴이 존재하지만 이스케이프는 그 안에서 해석되지 않습니다.C 및 Java는 문자열에 큰따옴표를 사용하고 문자에 작은따옴표를 사용합니다.
  • 코드를 유효한 JSON으로 하려면 큰따옴표를 사용해야 합니다.

둘 다에게 유리하다

JavaScript 에서는 두 가지 사이에 차이가 없습니다.그렇기 때문에 지금 편리한 것을 사용하셔도 됩니다.예를 들어, 다음 문자열 리터럴은 모두 같은 문자열을 생성합니다.

    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'

내부 문자열은 작은따옴표로 묶고 외부 문자열은 큰따옴표로 묶습니다.이를 통해 사용자에게 표시되는 문자열(또는 디스크에 쓰기 등)과 내부 상수를 구분할 수 있습니다.코드에 후자를 입력하는 것은 피해야 하지만 항상 그렇게 할 수는 없습니다.

퍼포먼스에 관해서라면, 견적은 결코 병목현상이 되지 않습니다.그러나 성능은 두 경우 모두 동일합니다.

코딩 속도에 대해 이야기합니다.'문자열을 구분하려면 , 이스케이프 할 필요가 있습니다."따옴표더 많이 사용할 필요가 있습니다."스트링 안에 있어요.§:

// JSON Objects:
var jsonObject = '{"foo":"bar"}';

// HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';

는 럼, 는, 는, 는, 저, 저, 아, 아, 아, 아, 아, 아, 아, 아, then, then, then, then, then, then'문자열을 구분하기 위해 이스케이프해야 하는 문자가 적습니다.

성능 차이를 본다고 주장하는 사람들이 있습니다. 오래된 메일링 리스트 스레드입니다.하지만 확인할 수 있는 건 하나도 없었어요.

중요한 것은 문자열 안에서 어떤 따옴표(더블 또는 싱글)를 사용하고 있는지 살펴보는 것입니다.그것은 탈출 횟수를 낮게 유지하는 데 도움이 된다.예를 들어 문자열 내에서 HTML 콘텐츠를 작업하는 경우 속성 주위에 있는 모든 큰따옴표를 이스케이프할 필요가 없도록 작은따옴표를 사용하는 것이 더 쉽습니다.

CoffeeScript를 사용할 때는 큰따옴표를 사용합니다.둘 중 하나를 선택하고 그것을 고수해야 한다는 것에 동의합니다.CoffeeScript는 큰따옴표를 사용할 때 보간 기능을 제공합니다.

"This is my #{name}"

ECMAScript 6은 템플릿 문자열에 백틱(')을 사용하고 있습니다.그럴 만한 이유가 있겠지만 코딩할 때 보간 기능을 얻기 위해 문자열 리터럴 문자를 따옴표 또는 큰따옴표로 변경하는 것이 번거로울 수 있습니다.CoffeeScript는 완벽하지 않을 수 있지만, 모든 곳에 동일한 문자열 리터럴 문자(큰따옴표)를 사용하여 항상 보간할 수 있는 것은 좋은 기능입니다.

`This is my ${name}`

작은따옴표를 사용할 수 없을 때는 큰따옴표를 사용하고, 그 반대도 마찬가지입니다.

"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'

대신:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""

엄밀하게는 차이가 없기 때문에 이스케이프 수를 낮게 유지하는 것은 대부분 취향과 문자열 내의 내용(또는 JavaScript 코드 자체가 문자열 내에 있는 경우)의 문제입니다.

속도차이 범례는 두 따옴표가 서로 다른 동작을 하는 PHP 월드에서 유래할 수 있습니다.

그 차이는 순전히 양식적이다.난 이중인용 나치였어지금은 거의 모든 경우에 작은 따옴표를 사용합니다.편집자가 구문을 강조하는 방법 이외에는 실질적인 차이가 없습니다.

작은따옴표 또는 큰따옴표를 사용할 수 있습니다.

이를 통해 따옴표를 피할 필요 없이 HTML 속성 내에 JavaScript 콘텐츠를 쉽게 중첩할 수 있습니다.PHP를 사용하여 JavaScript를 작성할 때도 마찬가지입니다.

대체적인 생각은, 가능하다면, 탈출할 필요가 없는 인용문을 사용한다는 것이다.

탈출 감소 = 더 나은 코드.

또한 (현재 MDN에서 언급되고 있는) 사양에는 닫힘과 이스케이프되지 않은 몇 글자를 제외하고 단일 따옴표와 이중 따옴표 사이에 차이가 없는 것으로 보입니다.단, 템플릿리터럴(` 문자는 추가 로 합니다 backtick 자 ) 。

문자열 리터럴은 0 이상의 Unicode 코드 포인트를 단일 따옴표 또는 이중 따옴표로 묶은 것입니다.유니코드 코드 포인트는 이스케이프 시퀀스로 나타낼 수도 있습니다.종료 따옴표 코드 포인트를 제외한 모든 코드 포인트는 문자 그대로 문자열 리터럴로 표시될 수 있습니다.U+005C (REVERSE SOLIDUS),U+000D (CARRIAGE RETURN) , , , , 입니다.U+000A (LINE FEED)모든 코드 포인트는 이스케이프 시퀀스의 형태로 표시될 수 있습니다.ECMAScript...

출처 : https://tc39.es/ecma262/ #sec-literals-string-literals

언급URL : https://stackoverflow.com/questions/242813/are-double-and-single-quotes-interchangeable-in-javascript

반응형