JavaScript中单引号和双引号的区别

154

我知道在 PHP 中,双引号和单引号的唯一区别是字符串内部变量解释和转义字符处理的不同。

在 JavaScript 中,我经常看到双引号用于字符串。这是有特别原因的吗?还是说单引号和双引号完全相同?


60
双引号需要按住 Shift 键才能输入,使用单引号可以节省很多精力。 :) - Tyler
6
德国、匈牙利、奥地利等国的许多键盘都需要同时按下Shift键,例如您所提到的键。 - totymedli
5
实际上,我需要按shift键才能输入单引号,但对于双引号来说(大多数土耳其Q键盘),我不需要按shift键。我会利用这一点,在PHP和JavaScript中使用双引号,除非需要或更适合使用单引号。 - Halil Özgür
6个回答

155

在字符串中,如果你想要双引号出现而不需要对它们进行转义(例如用于HTML属性),你应该使用单引号;或者反过来。除此之外,两者没有区别。

但是,请注意JSON(JavaScript对象表示法)只支持双引号字符串。


你能解释一下什么时候使用双引号和单引号吗?这两个有什么区别吗?$("[href$='.jpg']") 和 $('[href$=".jpg"]')之间有什么不同? - Anshu
@Anshu,Karim说“或者反过来”...所以他的意思是它可以用于你所述的两种情况。 - Jude Duran
1
@Anshu var answer = "没问题"; // 双引号内有单引号 var answer = "他叫做 '约翰尼'"; // 单引号在双引号中 var answer = '他叫做 "约翰尼"'; // 双引号在单引号中 - broadband
@Anshu,“form”指的是jQuery表达式使用单引号来允许在选择器/表达式中使用双引号,例如$('div[class^="example"]')。文本字符串使用双引号,因此可以使用撇号,例如“那就是为什么。” HTML字符串出于与jQuery相同的原因而倾向于使用单引号,例如'<body class="example">'。使用Javascript编写的JSON可以使用任一类型,因此对于文本使用双引号,对于HTML使用单引号。 - Orwellophile
...而C程序员使用单引号'c'表示字符,因为这是C语言的惯例。 - Orwellophile

58

JSON 中有一个不同之处 - JSON 标准规定所有的键值对都应该用双引号括起来 (感谢评论中的 wulfgarpro),因此我已经开始尽可能使用双引号,以避免在处理 JSON 时出错。


32
我个人认为最好不要尝试自己读写JSON。我总是使用JSON.parse和JSON.stringify,这样我就可以自由地使用单引号、双引号,甚至不加引号,而不用担心在其他地方造成解析错误。 - Tyler
5
请解释一下JSON的区别? - staticboy
19
JSON 标准规定所有键值对必须用双引号括起来。 - wulfgarpro
2
只有在编写原始的JSON时才需这么做。如果您正在编写JavaScript对象,则{key: 'value'}{"key": "value"}完全相同,并且键入速度更快。 - Orwellophile
5
称JSON为“原始的”是多余的。它要么是JSON,要么不是。 - Ben Aston
我认为他们所说的“原始JSON”指的是直接书写JSON字符串本身。JSON.stringify将一个Javascript对象转换成JSON格式。 - Paul Stelian

49

完全没有区别。免费报价 YEEHHAAA


4
编程的目标就是简洁明了。+1 - Callat

12
与 PHP 不同的是,在 ECMAScript 中使用双引号或单引号并不会改变字符串的解释方式。双引号包裹的字符串和单引号包裹的字符串是完全相同的。但需要注意的是,以双引号开头的字符串必须以双引号结尾,以单引号开头的字符串必须以单引号结尾。
尼古拉斯·扎卡斯 - 《Web前端开发专业JavaScript》

10

它们是相同的,我通常使用单引号,但这是因为我是一个 .net 开发人员,尤其是 asp.net,因此它有助于我区分这两种字符串。


13
可能是因为他讨厌ASP.Net -knuckle-。 - ՕլՁՅԿ

-6

我刚刚发现了一个区别。我正在制作一个移动网站,但我大多数时间都在桌面版Firefox上进行测试。这在Firefox上运行良好:

var searchArray = searchValue.split(' '); // Split a string at the spaces.

但是... 它在移动版Safari(运行iOS 6.1的iPhone 3GS)上无法正常工作。为了使其在移动版Safari上正常工作,您必须使用双引号:

var searchArray = searchValue.split(" "); // Split a string at the spaces.

如果您不使用双引号,它不会分割字符串,而是将整个字符串放入第一个数组元素中。这对我来说真的很难理解,花了相当长的时间才弄清楚;我不知道是什么让我尝试切换引号,因为我认为它们总是应该以相同的方式运作。我在谷歌上没有找到任何关于这个问题的信息,所以也许这会帮助到其他人。


1
FYI:我在 iPhone 5 / iOS 6.1 上进行了测试,没有发现这个问题。 - DG.
2
这是高度不可能的,否则很多网页在iOS上都会出现问题。 - JJJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接