console.log("double");
vs. console.log('single');
문자열을 처리할 때 작은따옴표를 사용하는 JavaScript 라이브러리가 점점 더 많아지고 있습니다. 하나를 다른 것보다 사용하는 이유는 무엇입니까?
나는 그것들이 거의 상호 교환 가능하다고 생각했습니다.
질문자 :Community Wiki
console.log("double");
vs. console.log('single');
문자열을 처리할 때 작은따옴표를 사용하는 JavaScript 라이브러리가 점점 더 많아지고 있습니다. 하나를 다른 것보다 사용하는 이유는 무엇입니까?
나는 그것들이 거의 상호 교환 가능하다고 생각했습니다.
다른 라이브러리에서 단일 대 이중을 사용하는 가장 가능성 있는 이유는 프로그래머 선호도 및/또는 API 일관성입니다. 일관성이 있는 것 외에는 문자열에 가장 적합한 것을 사용하십시오.
다른 유형의 인용문을 리터럴로 사용:
alert('Say "Hello"'); alert("Say 'Hello'");
이것은 복잡해질 수 있습니다:
alert("It's \"game\" time."); alert('It\'s "game" time.');
ECMAScript 6에 새로 추가된 또 다른 옵션 은 백틱 문자를 사용하는 템플릿 리터럴입니다.
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'
.큰따옴표는 다른 많은 언어에서 문자열을 의미합니다 . Java 또는 C와 같은 새로운 언어를 배울 때 항상 큰따옴표가 사용됩니다. Ruby, PHP 및 Perl에서 작은 따옴표로 묶인 문자열은 백슬래시 이스케이프를 의미하지 않지만 큰 따옴표는 백슬래시 이스케이프를 지원합니다.
JSON 표기법은 큰따옴표로 작성됩니다.
그럼에도 불구하고 다른 사람들이 말했듯이 일관성을 유지하는 것이 가장 중요합니다.
사양 의 섹션 7.8.4는 리터럴 문자열 표기법을 설명합니다. 유일한 차이점은 DoubleStringCharacter는 "SourceCharacter이지만 큰따옴표는 아님"이고 SingleStringCharacter는 "SourceCharacter이지만 작은따옴표는 아님"입니다. 따라서 유일한 차이점은 다음과 같이 증명될 수 있습니다.
'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를 내부적으로 구문 분석한다는 인상을 줍니다. 모든 것이 이미 이 '표준'에 따라 작성된 경우 Firefox가 JavaScript를 구문 분석하는 데 시간이 덜 걸린다고 생각할 수도 있습니다.
그건 그렇고, 작은 따옴표가 코드에서 훨씬 멋지게 보인다고 생각하기 때문에 저를 매우 슬픈 팬더로 만듭니다. 또한 다른 프로그래밍 언어에서는 일반적으로 큰따옴표보다 사용하기가 더 빠르므로 JavaScript에 동일하게 적용하는 경우에만 의미가 있습니다.
결론: 이에 대해서는 더 많은 연구가 필요하다고 생각합니다.
이것은 2003년 Peter-Paul Koch의 테스트 결과 를 설명할 수 있습니다.
익스플로러 윈도우에서는 작은 따옴표가 때때로 더 빠른 것 같지만(제 테스트의 약 1/3이 더 빠른 응답 시간을 보여주었습니다), Mozilla가 차이를 보이면 큰 따옴표를 약간 더 빠르게 처리합니다. 나는 Opera에서 전혀 차이를 발견하지 못했습니다.
2014: 최신 버전의 Firefox/Spidermonkey는 더 이상 이 작업을 수행하지 않습니다.
인라인 JavaScript를 수행하는 경우("나쁜" 작업이지만 해당 논의를 피하는 경우) 작은 따옴표가 문자열 리터럴에 대한 유일한 옵션이라고 생각합니다.
예를 들어 다음과 같이 잘 작동합니다.
<a onclick="alert('hi');">hi</a>
그러나 내가 알고 있는 이스케이프 방법을 통해 "hi"를 큰 따옴표로 묶을 수 없습니다. 심지어 "
(HTML의 속성 값에서 따옴표를 이스케이프 처리하고 있기 때문에) Firefox에서는 작동하지 않습니다. "
이 시점에서 JavaScript가 아닌 HTML로 이스케이프하기 때문에 작동하지 않습니다.
따라서 게임 이름이 일관성이고 애플리케이션의 일부에서 인라인 JavaScript를 수행하려는 경우 작은 따옴표가 승자라고 생각합니다. 내가 틀렸다면 누군가 나를 고쳐주세요.
기술적으로 차이가 없습니다. 스타일과 관습의 문제일 뿐입니다.
Douglas Crockford 는 내부 문자열에 작은따옴표를 사용하고 외부 문자열에 큰따옴표를 사용할 것을 권장합니다(외부라는 것은 메시지나 경고와 같이 애플리케이션 사용자에게 표시되는 문자열을 의미합니다).
나는 개인적으로 그것을 따릅니다.
업데이트: Mr. Crockford가 마음을 바꾼 것으로 보이며 이제 전체에 큰따옴표를 사용할 것을 권장합니다. :)
엄밀히 말하면 의미에는 차이가 없습니다. 그래서 선택은 편의에 달려 있습니다.
선택에 영향을 줄 수 있는 몇 가지 요소는 다음과 같습니다.
참조가 하는 일을 살펴보겠습니다.
jquery.js 내에서 모든 문자열은 큰따옴표로 묶여 있습니다.
이제부터 큰따옴표로 묶인 문자열을 사용하겠습니다. (저는 싱글을 사용했습니다!)
사용하는 것에 일관성을 유지하십시오. 그러나 편안함 수준을 낮추지 마십시오.
"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
나는 명백한 것을 추가하지 않기를 희망하지만 이에 대해 Django , Ajax 및 JSON으로 어려움을 겪고 있습니다.
HTML 코드에서 일반적으로 해야 하는 것처럼 큰따옴표를 사용한다고 가정하면 JavaScript의 나머지 부분에 작은따옴표를 사용하는 것이 좋습니다.
그래서 나는 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 를 사용하는 경우 큰따옴표로 묶인 문자열을 사용하면 오류가 발생합니다.
AngularJS의 Yeoman scafflholding을 통해 사용했지만 어떻게 든 이것을 구성하는 방법이있을 수 있습니다.
그건 그렇고, HTML을 JavaScript로 처리할 때 작은따옴표를 사용하는 것이 더 쉽습니다.
var foo = '<div class="cool-stuff">Cool content</div>';
그리고 적어도 JSON은 문자열을 나타내기 위해 큰따옴표를 사용하고 있습니다.
귀하의 질문에 간단하게 답할 수 있는 방법은 없습니다.
작은 따옴표를 사용하는 (어리석은) 한 가지 이유는 큰 따옴표가 필요한 반면 Shift 키를 눌러 입력할 필요가 없기 때문입니다. (저는 평균 문자열에 이스케이프가 필요하지 않다고 가정합니다. 이는 합리적인 가정입니다.) 이제 매일 200줄의 코드를 코딩한다고 가정해 보겠습니다. 아마도 그 200줄에 30개의 인용문이 있을 것입니다. 큰따옴표를 입력하는 것이 작은따옴표를 입력하는 것보다 0.1초 더 시간이 걸릴 수 있습니다(Shift 키를 눌러야 하기 때문에). 그런 다음 주어진 날에 3초를 낭비합니다. 40년 동안 1년에 200일 동안 이런 방식으로 코딩하면 내 인생에서 6.7시간을 낭비한 것입니다. 생각할 거리.
장점과 단점을 검토
작은 따옴표에 찬성
elem.innerHTML = '<a href="' + url + '">Hello</a>';
elem.innerHTML = "<a href='" + url + "'>Hello</a>";
또한 인라인 HTML은 일반적으로 안티 패턴입니다. 템플릿을 선호합니다.
myJson = '{ "hello world": true }';
다시 말하지만, 이런 식으로 JSON을 구성할 필요는 없습니다. JSON.stringify()는 종종 충분합니다. 그렇지 않은 경우 템플릿을 사용하십시오.
큰 따옴표에 찬성
둘 다에 찬성
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">';
'
를 사용하는 것을 선호하므로 더 적은 수의 문자를 이스케이프해야 합니다.
JavaScript에서는 작은 따옴표와 큰 따옴표 사이에 차이가 없습니다.
사양이 중요합니다.
성능 차이가 있을 수 있지만 절대적으로 최소이며 브라우저의 구현에 따라 언제든지 변경될 수 있습니다. JavaScript 애플리케이션이 수십만 라인이 되지 않는 한 더 이상의 논의는 무의미합니다.
벤치마크와 같은 경우
a=b;
보다 빠르다
a = b;
(여분의 공백)
오늘날 특정 브라우저 및 플랫폼 등에서
큰 따옴표에서 작은 따옴표로의 전환에 대한 또 다른 이유는 서버 측 스크립트의 인기도가 높아졌기 때문입니다. PHP를 사용할 때 PHP에서 문자열과 변수를 사용하여 변수를 전달하고 JavaScript 함수를 구문 분석할 수 있습니다.
문자열을 작성하고 PHP에 큰따옴표를 사용하면 작은따옴표를 이스케이프 처리할 필요가 없으며 PHP는 자동으로 변수 값을 검색합니다.
예:내 서버의 변수를 사용하여 JavaScript 함수를 실행해야 합니다.
public static function redirectPage( $pageLocation ) { echo "<script type='text/javascript'>window.location = '$pageLocation';</script>"; }
이렇게 하면 문자열 결합을 처리해야 하는 번거로움이 줄어들고 PHP에서 JavaScript를 효과적으로 호출할 수 있습니다. 이것은 하나의 예일 뿐이지만 프로그래머가 JavaScript에서 작은따옴표를 기본값으로 사용하는 여러 이유 중 하나일 수 있습니다.
큰따옴표로 묶인 문자열의 가장 중요한 기능은 변수 이름이 확장된다는 사실입니다. 자세한 내용은 문자열 구문 분석을 참조하세요.
나는 다음을 약 20 번 실행했습니다. 그리고 큰따옴표가 약 20% 더 빠른 것으로 보입니다.
재미있는 부분은 부분 2와 부분 1을 변경하면 작은따옴표가 약 20% 더 빠릅니다.
//Part1 var r=''; var iTime3 = new Date().valueOf(); for(var j=0; j<1000000; j++) { r+='a'; } var iTime4 = new Date().valueOf(); alert('With single quote : ' + (iTime4 - iTime3)); //Part 2 var s=""; var iTime1 = new Date().valueOf(); for(var i=0; i<1000000; i++) { s += "a"; } var iTime2 = new Date().valueOf(); alert('With double quote: ' + (iTime2 - iTime1));
성능 차이가 있다고 주장하는 사람들이 있습니다: old mailing list thread . 그러나 나는 그들 중 어느 것도 확인할 수 없었습니다.
가장 중요한 것은 문자열 내부에서 어떤 종류의 따옴표(이중 또는 단일)를 사용하고 있는지 확인하는 것입니다. 탈출 횟수를 줄이는 데 도움이 됩니다. 예를 들어, 문자열 내부의 HTML 콘텐츠로 작업할 때 속성 주위에 모든 큰따옴표를 이스케이프할 필요가 없도록 작은따옴표를 사용하는 것이 더 쉽습니다.
CoffeeScript를 사용할 때 큰따옴표를 사용합니다. 둘 중 하나를 선택하고 고수해야 한다는 데 동의합니다. CoffeeScript는 큰따옴표를 사용할 때 보간을 제공합니다.
"This is my #{name}"
ECMAScript 6 은 템플릿 문자열에 백틱(`)을 사용합니다. 아마도 그럴만한 이유가 있지만 코딩할 때 보간 기능을 사용하기 위해 문자열 리터럴 문자를 따옴표 또는 큰따옴표에서 역따옴표로 변경하는 것은 번거로울 수 있습니다. CoffeeScript는 완벽하지 않을 수 있지만 모든 곳에서 동일한 문자열 리터럴 문자(큰따옴표)를 사용하고 항상 보간할 수 있는 것은 좋은 기능입니다.
`This is my ${name}`
작은 따옴표를 사용할 수 없을 때 큰 따옴표를 사용하고 그 반대의 경우도 마찬가지입니다.
"'" + singleQuotedValue + "'" '"' + doubleQuotedValue + '"'
대신에:
'\'' + singleQuotedValue + '\'' "\"" + doubleQuotedValue + "\""
JavaScript와 C# 사이를 다시 이동하는 경우 큰따옴표인 일반적인 규칙에 대해 손가락을 훈련하는 것이 가장 좋습니다.
이제 2020년이 되었으므로 JavaScript에 대한 세 번째 옵션인 모든 것에 대한 단일 백틱을 고려해야 합니다.
이것은 작은따옴표나 큰따옴표 대신 모든 곳에서 사용할 수 있습니다.
그것은 당신이 모든 일을 할 수 있습니다!
그 안에 작은 따옴표를 포함하십시오: `멋져요!`
그 안에 큰따옴표를 삽입하십시오: `"정말" 훌륭합니다!`
문자열 보간법 사용: `대단한 것보다 "${better}"입니다!`
여러 줄을 허용합니다. `
이것
만들다
자바스크립트
더 나은!
`
또한 다른 두 개를 대체할 때 성능 손실을 일으키지 않습니다. JavaScript에서 백틱(``)이 다른 문자열보다 느립니까?
더 빠르거나 이점이 있을 수 있다는 모든 답변을 읽은 후 Google Closure 컴파일러 가 작은따옴표를 큰따옴표로 변환하기 때문에 큰따옴표가 더 좋거나 더 빠를 수도 있다고 말하고 싶습니다.
엄밀히 말하면 차이가 없으므로 이스케이프 수를 낮게 유지하는 것은 대부분 취향과 문자열에 있는 내용(또는 JavaScript 코드 자체가 문자열에 있는 경우)의 문제입니다.
속도 차이 범례는 두 따옴표가 서로 다른 동작을 하는 PHP 세계에서 올 수 있습니다.
JavaScript 소스가 다음과 같은 경우
elem.innerHTML="<img src='smily' alt='It\'sa Smily' style='width:50px'>";
HTML 소스는 다음과 같습니다.
<img src="smiley" alt="It's a Smiley" style="width:50px">
또는 HTML5의 경우
<img src=smiley alt="It's a Smiley" style=width:50px>
JavaScript는 다음과 같은 배열을 허용합니다.
var arr=['this','that'];
그러나 문자열화하면 호환성 이유가 있습니다.
JSON=["this","that"]
시간이 좀 걸릴 거라 확신합니다.
그냥 내 추가 두 센트 : 나는뿐만 아니라 그것을 탈출하지 않고 이스케이프 문자 ( '')을 입력 할 수 있도록 자바 스크립트와 PHP 몇 년 전에 모두 작업, 나는 작은 따옴표를 사용하는데 익숙해했습니다. 나는 일반적으로 파일 경로 등의 원시 문자열 을 입력할 때 사용했습니다.
if (typeof s == 'string') ...
(이스케이프 문자는 절대 사용되지 않음) 및 큰 따옴표와 같은 식별자 유형 원시 문자열에 작은 따옴표를 사용하게 되었습니다. "Hey, What's up?"과 같은 텍스트의 경우. 또한 식별자 이름을 표시하기 위해 인쇄상의 규칙으로 주석에 작은 따옴표를 사용합니다. '<a href="#"> like so <a>'
입력할 때와 같이 필요할 때만 중단합니다(여기서 따옴표를 반대로 할 수도 있음). 또한 JSON의 경우 이름에 큰 따옴표가 사용된다는 것도 알고 있습니다. 하지만 그 외에는 document.createElement('div')
와 같이 따옴표 사이의 텍스트에 이스케이프가 필요하지 않을 때 개인적으로 작은 따옴표를 선호합니다. document.createElement('div')
.
결론은 일부 사람들이 언급/언급한 것처럼 규칙을 선택하고, 이를 고수하고, 필요할 때만 벗어나는 것입니다.
출처 : http:www.stackoverflow.com/questions/242813/when-should-i-use-double-or-single-quotes-in-javascript
일광 절약 시간 및 표준 시간대 모범 사례 [닫힘] (0) | 2021.12.01 |
---|---|
PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? (0) | 2021.12.01 |
JavaScript .prototype은 어떻게 작동합니까? (0) | 2021.12.01 |
임의의 정수를 어떻게 생성합니까? (0) | 2021.12.01 |
Android에서 '컨텍스트'란 무엇입니까? (0) | 2021.11.30 |