Dấu ngoặc đơn so với dấu ngoặc kép ('vs ")


250

Tôi đã luôn sử dụng các trích dẫn đơn khi viết HTML bằng tay. Tôi làm việc với rất nhiều HTML được kết xuất luôn sử dụng dấu ngoặc kép. Điều này cho phép tôi xác định xem HTML được viết bằng tay hay được tạo. Đây có phải là một ý tưởng tốt?

Sự khác biệt giữa hai là gì? Tôi biết cả hai đều hoạt động và được hỗ trợ bởi tất cả các trình duyệt hiện đại nhưng có một sự khác biệt thực sự nơi một cái thực sự tốt hơn cái kia trong các tình huống khác nhau?



5
Để trả lời câu hỏi về việc sử dụng dấu ngoặc đơn so với dấu ngoặc kép làm phương tiện để xác định HTML viết tay và HTML được tạo ra, có lẽ đó không phải là một ý kiến ​​hay. Mặc dù mã không nhất quán (sử dụng một lần ở một số nơi, gấp đôi ở những nơi khác) có thể được viết bằng tay, tôi chắc chắn nhiều người (bao gồm cả tôi) sử dụng dấu ngoặc kép ở mọi nơi, nhưng mã của chúng tôi chắc chắn không phải do máy tính tạo ra; )
Doktor J

Câu trả lời của @ Aito thực sự chính xác và nên được chấp nhận ... Cá nhân tôi sử dụng các trích dẫn đơn cho các thuộc tính ngắn như từ khóa / thẻ, URL và tài liệu tham khảo; thực sự bất cứ thứ gì không được con người đọc. Đối với các văn bản dài hơn, hoặc bất cứ điều gì có thể bao gồm khoảng trắng hoặc dấu ngoặc đơn / dấu nháy đơn - như nội dung, tôi sử dụng dấu ngoặc kép. Đó chỉ là vấn đề về phong cách của bạn (hoặc hướng dẫn về phong cách bạn sử dụng)
cedbeu

1
kiểm tra 10 trang web lớn và xem phần lớn trong số họ sử dụng, như stackoverflow, youtube / google, wikipedia. Cho đến nay tôi gặp khó khăn khi tìm các trang web lớn sử dụng dấu ngoặc đơn.
Timo Huovinen 2/11/2015

Câu trả lời:


391

Các w3 org đã nói :

Theo mặc định, SGML yêu cầu tất cả các giá trị thuộc tính được phân tách bằng dấu ngoặc kép (ASCII thập phân 34) hoặc dấu ngoặc kép đơn (ASCII thập phân 39). Dấu ngoặc đơn có thể được bao gồm trong giá trị thuộc tính khi giá trị được phân định bằng dấu ngoặc kép và ngược lại. Tác giả cũng có thể sử dụng tham chiếu ký tự số để biểu thị dấu ngoặc kép ( ") và dấu ngoặc đơn ( '). Đối với dấu ngoặc kép, tác giả cũng có thể sử dụng tham chiếu thực thể ký tự ".

Vì vậy ... dường như không có gì khác biệt. Chỉ phụ thuộc vào phong cách của bạn.


38
và nhất quán (với 'hoặc ") rất có thể sẽ dẫn đến tốc độ nén cao hơn trong trường hợp bạn phục vụ các trang được nén (gzip, defat)
cherouvim

2
@Aito, đó là cho SGML. Đối với HTML, không phải tất cả các giá trị thuộc tính cần được phân định
Pacerier

4
Tôi đề nghị mặc dù đơn hơn gấp đôi - Tại sao sử dụng hai khi một người có thể thực hiện công việc.
Ujjwal Singh

7
@JohnHunt: Chỉ cần thực hiện một thử nghiệm nhanh trên tệp js 1823 byte (Mô hình xương sống ngẫu nhiên từ một ứng dụng ngẫu nhiên). Đầu ra gzip nếu tất cả các dấu ngoặc kép giống nhau (hoặc 'hoặc ") là 809 byte. Trộn chúng đã đẩy đầu ra lên tới 829 byte. Điều này có thể không liên quan đến bạn nhưng điều đó không có nghĩa là nó không liên quan đến mọi người.
cherouvim

3
Nếu người ta nói "ồ nó có tiềm năng thấp như vậy, có lẽ không liên quan" với hàng trăm thứ "có lẽ không liên quan", cái chết của hàng ngàn mũi kim xảy ra. Trong nỗ lực hợp lý, mọi thứ bạn có thể tiết kiệm đều đáng để lưu IMO.
HỢP ĐỒNG SAYS TÔI QUYỀN

67

Tôi sử dụng "như một tầng trên cùng và 'như một tầng thứ hai, như tôi tưởng tượng hầu hết mọi người làm. Ví dụ

<a href="#" onclick="alert('Clicked!');">Click Me!</a>

Trong ví dụ đó, bạn phải sử dụng cả hai, điều đó là không thể tránh khỏi.


38
Tôi cũng làm điều đó nhưng nó có thể tránh được nếu bạn tránh nội tuyến javascript trong html.
cherouvim

4
Có các tình huống javascript không nội tuyến khác trong đó các trích dẫn có thể được yêu cầu, chẳng hạn như khi sử dụng các data-*thuộc tính tùy chỉnh . Tùy thuộc vào ứng dụng của bạn và cách bạn sử dụng các data-*thuộc tính, bạn có thể cần phải sử dụng 'trong phạm vi ". Đôi khi chúng tôi sử dụng chúng để theo dõi sự kiện Google Analytics:<a href="..." data-track="Homepage Banner|Clicked|Dick's Sporting Goods">click me</a>
Jake Wilson

3
Hãy xem xétvar x = "<a href='" + url + "'>click me</a>";
NibblyPig

4
Có thể dễ dàng tránh được như thế này: <a onclick="alert(\"Clicky!\")">. Tuy nhiên, điều này là rất ít đọc.
fabspro

2
Tuy nhiên, tôi không hoàn toàn chắc chắn nếu điều đó được hỗ trợ chính thức bởi SGML và HTML5.
fabspro

26

Trích dẫn các quy ước cho các nhà phát triển web

Câu trả lời ngắn

Trong HTML, việc sử dụng dấu ngoặc đơn (') và dấu ngoặc kép (") có thể thay thế cho nhau, không có sự khác biệt.

Nhưng tính nhất quán được khuyến nghị, do đó chúng ta phải chọn một quy ước cú pháp và sử dụng nó thường xuyên.

Câu trả lời dài

Phát triển web thường bao gồm nhiều ngôn ngữ lập trình. HTML, JS, CSS, PHP, ASP, RoR, Python, ect. Do đó, chúng tôi có nhiều quy ước cú pháp cho các ngôn ngữ lập trình khác nhau. Thông thường những thói quen từ một ngôn ngữ sẽ theo chúng ta đến các ngôn ngữ khác, ngay cả khi nó không được coi là "đúng" tức là các quy ước bình luận. Công ước trích dẫn cũng thuộc loại này cho tôi.

Nhưng tôi có xu hướng sử dụng HTML chặt chẽ kết hợp với PHP. Và trong PHP có một sự khác biệt lớn giữa dấu ngoặc đơn và dấu ngoặc kép. Trong PHP với dấu ngoặc kép "bạn có thể chèn các biến trực tiếp trong văn bản của chuỗi". (scriptingok.com) Và khi sử dụng dấu ngoặc đơn "văn bản sẽ xuất hiện". (scriptingok.com)

PHP mất nhiều thời gian hơn để xử lý chuỗi trích dẫn kép . Do trình phân tích cú pháp PHP phải đọc toàn bộ chuỗi trước để phát hiện bất kỳ biến nào trong bộ dữ liệu và ghép nối nó nên nó mất nhiều thời gian để xử lý hơn một chuỗi được trích dẫn. (scriptingok.com)

 

Báo giá đơn dễ dàng hơn trên máy chủ . Vì PHP không cần phải đọc toàn bộ chuỗi trước, nên máy chủ có thể hoạt động nhanh hơn và hạnh phúc hơn. (scriptingok.com)

Những thứ khác để xem xét

  1. Tần suất của dấu ngoặc kép trong chuỗi. Tôi thấy rằng tôi cần sử dụng dấu ngoặc kép (") trong chuỗi của mình thường xuyên hơn tôi cần sử dụng dấu ngoặc đơn (') trong chuỗi. Để giảm số lần thoát ký tự cần thiết, tôi ưu tiên các dấu phân cách trích dẫn đơn.
  2. Thật dễ dàng để thực hiện một trích dẫn. Điều này khá tự giải thích nhưng để làm rõ, tại sao nhấn phím SHIFT nhiều lần hơn thì bạn phải làm.

Hội nghị của tôi

Với sự hiểu biết về PHP này, tôi đã đặt ra quy ước (cho bản thân tôi và phần còn lại của công ty tôi) rằng các chuỗi sẽ được biểu diễn dưới dạng các trích dẫn theo mặc định để tối ưu hóa máy chủ. Dấu ngoặc kép được sử dụng trong chuỗi nếu một dấu ngoặc kép được yêu cầu, chẳng hạn như JavaScript trong một thuộc tính, ví dụ:

<button onClick='func("param");'>Press Me</button>

Tất nhiên, nếu chúng ta ở trong PHP và muốn trình phân tích cú pháp xử lý các biến PHP trong chuỗi, chúng ta nên cố ý sử dụng dấu ngoặc kép. $a='Awesome'; $b = "Not $a";

Nguồn

Dấu ngoặc đơn so với dấu ngoặc kép trong PHP. (thứ). Truy cập ngày 26 tháng 11 năm 2014, từ http://www.scriptingok.com/tutorial/Single-quotes-vs-double-quotes-in-PHP


3
Báo giá đơn lẻ so với hiệu suất trích dẫn kép trong PHP được biết là 0 năm trước khi bạn trả lời câu hỏi này: nikic.github.io/2012/01/09/ trên
Conor Mancone

1
Bạn tìm thấy nhiều dấu ngoặc kép hơn dấu ngoặc đơn trong chuỗi của bạn? Hấp dẫn. Tôi không thể nhớ lần cuối cùng tôi có một trích dẫn kép trong chuỗi của tôi.
Zonker.in.Geneva

Không ngừng. Trong 10 năm qua với tư cách là nhà phát triển full-stack, tôi thấy mình cần sử dụng dấu ngoặc kép trong chuỗi gấp 10 lần so với dấu ngoặc đơn. Ví dụ phổ biến nhất cho JavaScript là bộ chọn thuộc tính CHỈ hoạt động với dấu ngoặc kép nên hoàn toàn không hoạt động document.querySelector("[name^='myname']")trong khi document.querySelector('[name^="myname"]')hoạt động hoàn hảo.
Dustin Poissant

@DustinPoissant WHAAAT ?? Trên trình duyệt nào ??
Ông Lister

14

Nếu tất cả đều giống nhau, có lẽ sử dụng dấu ngoặc đơn sẽ tốt hơn vì nó không yêu cầu giữ phím shift. Ít tổ hợp phím hơn == cơ hội ít hơn của RSI.


2
tốt, ít nhất là trên bố cục chung của thiên hà. (hush-hush)
n611x007

1
Rủi ro của RSI và số lượng tổ hợp phím có liên quan gì đến các tiêu chuẩn mã hóa?
Dib

rất nhiều ý kiến ​​cho rằng không có sự khác biệt giữa dấu ngoặc đơn và dấu ngoặc kép, nhưng chỉ có một ý kiến ​​làm rõ rằng số lượng tổ hợp phím khác nhau là một yếu tố của HAI. Và chúng tôi cần nhiều trích dẫn. Tôi có thể thêm vào với gợi ý rằng có lẽ nó sẽ cần nhiều nơ-ron hơn để kích hoạt nhận dạng mẫu của một trích dẫn kép trong não của chúng ta?
Roland

Điều đó không đúng với bàn phím tiếng Pháp.
Tokeeen.com

11

Trong HTML tôi không tin rằng vấn đề là bạn sử dụng "hay ', nhưng nó nên được sử dụng nhất quán trong toàn bộ tài liệu.

Việc sử dụng của riêng tôi thích các thuộc tính / html sử dụng ", trong khi tất cả các javascript sử dụng 'thay thế.

Điều này làm cho nó dễ dàng hơn một chút, đối với tôi, để đọc và kiểm tra. Nếu việc sử dụng của bạn có ý nghĩa với bạn hơn tôi, thì không cần phải thay đổi. Nhưng, với tôi, mã của bạn sẽ cảm thấy lộn xộn. Đó là cá nhân là tất cả.


Tại sao nó cần phải được sử dụng nhất quán? Chỉ để dễ đọc?
gian biểu

Bởi vì nó dễ dàng hơn để tránh những sai lầm theo cách đó.
David nói phục hồi Monica

2
Tôi cũng thường sử dụng các thuộc tính ", nhưng lần khác tôi đang viết mã bằng mã PHP nơi tôi muốn echosử dụng "các mục đích để cho phép phân tích cú pháp. Bất kỳ thuộc tính html nào trong tiếng vang này đều dễ đọc hơn nếu sử dụng '. Chắc chắn nó không nhất quán, nhưng nó dễ dàng hơn nhiều mà không có dấu gạch chéo ngược.
gian biểu

3
Bất cứ điều gì làm việc cho bạn là tốt; nhất quán không có nghĩa là 'luôn luôn làm X', nó chỉ có nghĩa là 'trong tình huống X làm theo cách này', tính nhất quán có thể được nhận biết theo ngữ cảnh; và được sử dụng tốt nhất như vậy.
David nói phục hồi Monica

9

Trên thực tế, cách tốt nhất là cách Google khuyến nghị. Dấu ngoặc kép: https://google.github.io/styleguide/htmlcssguide.xml?showone=HTML_Quotation_Marks#HTML_Quotation_Marks

Xem https://google.github.io/styleguide/htmlcssguide.xml?showone=HTML_Valids#HTML_Valid Lời khuyên được trích dẫn từ Google: "Sử dụng HTML hợp lệ là thuộc tính chất lượng cơ sở có thể đo lường được, góp phần tìm hiểu về các yêu cầu và ràng buộc kỹ thuật và đảm bảo sử dụng HTML đúng cách. "


Phần lớn các trang web tôi gặp cho đến nay, bao gồm stackoverflow, sử dụng dấu ngoặc kép, tôi nghĩ rằng tính nhất quán trên web là tốt hơn, vì vậy câu trả lời đúng IMHO cũng là "dấu ngoặc kép".
Timo Huovinen

2
Nhưng tại sao!? Tại sao "hơn '! ??
San

2
@San Tính nhất quán, chủ yếu. Nó tuân theo tiêu chuẩn tiếng Anh của Mỹ rằng các trích dẫn kép dành cho dấu ngoặc kép và dấu ngoặc đơn là dành cho các câu hỏi con.
Nielsvh

6

Tôi biết LOTS người sẽ không đồng ý, nhưng đây là những gì tôi làm và tôi thực sự tận hưởng một phong cách mã hóa như vậy: Tôi thực sự không sử dụng bất kỳ quote trong HTML trừ khi nó là hoàn toàn cần thiết.

Thí dụ:

<form method=post action=#>
<fieldset>
<legend>Register here: </legend>
  <label for=account>Account: </label>
  <input id=account type=text name=account required><br>
  <label for=password>Password: </label>
  <input id=password type=password name=password required><br>
...

Dấu ngoặc kép chỉ được sử dụng khi có khoảng trắng trong các giá trị thuộc tính hoặc bất cứ điều gì:

<form class="val1 val2 val3" method=post action=#>
  ...
</form>

1
Có một lý do đằng sau? Hay bạn chỉ "thực sự thích phong cách mã hóa như vậy"?
Bọ Bunny

4
Không có dấu ngoặc kép, HTML trông gọn gàng hơn rất nhiều (và kích thước tệp nhỏ hơn một chút). Đó là lý do duy nhất và không có gì khác. Hơn nữa, tôi thực sự không thể nhìn thấy điểm yêu cầu mọi thuộc tính phải có dấu ngoặc kép. Tại sao nó không thể được bỏ qua để cứu rắc rối? Ngay cả w3.org cũng chấp nhận các giá trị thuộc tính không được trích dẫn ( w3.org/TR/html-markup/syntax.html#syntax-attr-unquote ). Đơn giản là tốt hơn phức tạp. Đây có phải là một loại tôn giáo để có dấu ngoặc kép?
Randy Tang

5
Không, không có tôn giáo mà tôi nhận thức được. Tôi đã ở quanh HTML khá lâu và chưa bao giờ thấy phong cách của bạn được sử dụng trước đây ... vì vậy tôi đã hỏi.
Bọ Bunny

1
Ngoài ra, công cụ khai thác HTML cũng loại bỏ các trích dẫn không cần thiết.
Nimrod

2
Vấn đề với việc bỏ dấu ngoặc kép xung quanh các giá trị thuộc tính là các tiêu chuẩn khác nhau có danh sách các ký tự khác nhau cần được trích dẫn. Ví dụ: HTML4 cho biết chỉ các giá trị bao gồm chữ cái, chữ số, dấu gạch ngang và dấu chấm có thể không được trích dẫn, nhưng HTML5 cho biết mọi thứ đều đi trừ khoảng trắng và "'` <=>, vì vậy bạn nên cẩn thận, đặc biệt là với các trình duyệt cũ hơn!
Mr Lister

5

Sử dụng dấu ngoặc kép cho HTML

I E

<div class="colorFont"></div>

Sử dụng dấu ngoặc đơn cho JavaScript

I E

$('#container').addClass('colorFont');
$('<div class="colorFont2></div>');

2

Tôi đã gặp sự cố khi sử dụng Bootstrap khi sử dụng dấu ngoặc kép có vấn đề so với sử dụng dấu ngoặc đơn (không hoạt động). class = 'row-liquid' đã cho tôi các vấn đề khiến nhịp cuối cùng giảm xuống dưới các nhịp khác thay vì ngồi độc đáo bên phải ở phía bên phải, trong khi class = "row-liquid" hoạt động.


1

nếu bạn đang viết asp.net thì thỉnh thoảng bạn phải sử dụng dấu ngoặc kép trong câu lệnh Eval và dấu ngoặc đơn để phân định các giá trị - điều này chủ yếu để mã nội tuyến C # biết sử dụng chuỗi trong bộ chứa eval chứ không phải là ký tự. Cá nhân tôi chỉ sử dụng cái này hoặc cái kia như một tiêu chuẩn và không trộn lẫn chúng, nó trông có vẻ lộn xộn.


1

Sử dụng "thay vì" khi:

<input value="user"/> //Standard html
<input value="user's choice"/> //Need to use single quote
<input onclick="alert('hi')"/> //When giving string as parameter for javascript function

Sử dụng 'thay vì "khi:

<input value='"User"'/> //Need to use double quote
var html = "<input name='username'/>" //When assigning html content to a javascript variable

3
Trong trường hợp của bạn "gán nội dung html làm biến js", tôi thường thích làm ngược lại: var html = '<input name="username" />';và giữ sự nhất quán với phần còn lại của html :)
Erenor Paz

1

Nó không có gì khác biệt với html nhưng nếu bạn đang tạo html động với ngôn ngữ lập trình khác thì một cách có thể dễ dàng hơn so với cách khác.

Ví dụ, trong Java , trích dẫn kép được sử dụng để chỉ ra điểm bắt đầu và kết thúc của Chuỗi, vì vậy nếu bạn muốn bao gồm một doublequote trong Chuỗi, bạn phải thoát nó bằng dấu gạch chéo ngược.

String s = "<a href=\"link\">a Link</a>"

Bạn không gặp vấn đề như vậy với một trích dẫn, do đó, việc sử dụng một trích dẫn sẽ tạo ra mã dễ đọc hơn trong Java.

String s = "<a href='link'>a Link</a>"

Đặc biệt là nếu bạn phải viết các phần tử html có nhiều thuộc tính. (Lưu ý tôi thường sử dụng một thư viện như jhtml để viết html bằng Java, nhưng không phải lúc nào cũng thực tế để làm như vậy)


Đã hai thực tập trên servlets. Tôi đã phân tích mã của mình và chỉ bây giờ tôi mới bắt đầu nhận ra thực tế trên dấu ngoặc kép, dấu ngoặc đơn và nối chuỗi. Trang web tôi sử dụng để nghiên cứu đã sử dụng dấu ngoặc kép trong html và dấu ngoặc đơn trong java. Thậm chí không nhận ra. Vui mừng cuối cùng tôi đã nhận được nó ...
Michael

0

Tôi là người mới ở đây nhưng tôi chỉ sử dụng dấu ngoặc kép khi tôi sử dụng dấu ngoặc kép bên trong dấu đầu tiên. Nếu tôi không rõ ràng, tôi chỉ cho bạn ví dụ:

<p align="center" title='One quote mark at the beginning so now I can
"cite".'> ... </p>

Tôi mong tôi đã giúp đỡ được.


-5

Trong PHP sử dụng dấu ngoặc kép làm giảm hiệu suất một chút vì tên biến được đánh giá, vì vậy trong thực tế, tôi luôn sử dụng dấu ngoặc đơn khi viết mã:

echo "This will print you the value of $this_variable!";
echo 'This will literally say $this_variable with no evaluation.';

Vì vậy, bạn có thể viết này thay thế;

echo 'This will show ' . $this_variable . '!';

Tôi tin rằng các chức năng Javascript tương tự, vì vậy một cải tiến rất nhỏ về hiệu suất, nếu điều đó quan trọng với bạn.


Ngoài ra, nếu bạn nhìn xuống HTML spec 2.0, tất cả các thẻ được liệt kê ở đây;

Tham chiếu DTD HTML W3

(Sử dụng doublequote.) Tính nhất quán là quan trọng cho dù bạn có xu hướng sử dụng thường xuyên hơn.


13
JavaScript không đánh giá tên biến trong chuỗi. Không có sự khác biệt giữa 'và "trong JavaScript.
John Mellor

-9

Dấu ngoặc kép được sử dụng cho các chuỗi (nghĩa là "đây là một chuỗi") và dấu ngoặc đơn được sử dụng cho một ký tự (nghĩa là 'a', 'b' hoặc 'c'). Tùy thuộc vào ngôn ngữ lập trình và ngữ cảnh, bạn có thể thoát khỏi việc sử dụng dấu ngoặc kép cho một ký tự nhưng không phải là dấu ngoặc đơn cho một chuỗi.

HTML không quan tâm đến cái bạn sử dụng. Tuy nhiên, nếu bạn đang viết HTML bên trong tập lệnh PHP, bạn nên giữ dấu ngoặc kép vì bạn sẽ cần thoát chúng (nghĩa là \ "sao cũng được \") để tránh nhầm lẫn giữa bản thân và PHP.


Tôi biết khá nhiều ngôn ngữ lập trình, nhưng một trong những điều này là đúng.
mikl

1
@mikl thực hành chung trong C # và Java là Chuỗi trong dấu ngoặc kép và ký tự trong dấu ngoặc đơn. Nhưng điều đó không đưa ra xác nhận cho câu trả lời này. Trừ khi đây là câu trả lời cho một câu hỏi khác.
Evorlor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.