在Javascript中,' '、" "和没有引号的区别是什么?

7

我意识到我一直在不知道为什么的情况下在它们之间切换,而且很难搜索。


2
你能举个具体的例子吗? - Pekka
4
字符串可以使用""'',没有区别(选择使转义更少的一个("Mr. O'Neil"'I said "hi"'))。数字不需要用引号括起来,例如 12 - gen_Eric
4个回答

16

' '" " 是相同的东西,它们用于定义字符串文字。

没有引号的内容可能是标识符、关键字、非字符串文字、属性名称或数字(可能漏掉了一个)。

示例:

"hello world"        literal (string)
'hello world'        literal (string) with same contents
document             identifier (object)
{ a: 1 }             property name
if                   keyword (start conditional statement)
3.4                  literal (number)
/abc/                literal (regex object)

单引号包含的字符串文字不需要转义双引号,反之亦然,例如:

'<a href="">click me</a>'    HTML containing double quotes
"It's going to rain"         String containing single quote

3
最后两个不算标识符,是吗?在我看来,它们是各自类型的文字语法(数字和正则表达式),就像前两个字符串示例一样。 - user1106925
1
@amnotiam 你说得很有道理;我已经将它们重新分类为字面量 :) 谢谢! - Ja͢ck
1
啊,我们到了。+1 在“没有引号的东西”类别下,我能想到的只有运算符和语句终止符...如果你想算的话,空格也算。 - user1106925
@amnotiam 哈哈,非常正确,但我认为除非 OP 想要完整的语言分解,否则现在只能这样了;-) - Ja͢ck
是的,你已经回答了OP所问的问题,而且还多说了很多。 - user1106925

6

' '" " 用于引用字符串字面值,代表字符串,而没有引号的字面值则是变量(变量名、常量),称为标识符,例如:

variable = 'Hello'; (Here `variable` is identifier and 'Hello' is string literal)


var = "Ho There"

你可能想问,单引号'和双引号"之间有什么区别?
区别在于,使用双引号包含的字符串中如果有特殊字符,则需要转义。例如:
变量 = "hi " there"; ---> 这里你需要转义字符串内的双引号"
Variable = "hi \" there"; 

但是如果使用单引号',则不需要转义(除非字符串中有额外的')。您可以像这样编写代码:
var = 'Hello " World"';

5

"' 是可以互换使用的(但是需要成对使用)。

myObject["property"]myObject.property 也是可以互换使用的。 $var foo = "property"; myObject[foo] 也是可行的。(参见下面的注释)


myObject[property] 获取名为 property 值的属性在 myObject 对象中的值。 - pbfy0

0

快速 jsfiddle 测试, 单引号和双引号都可以转义控制码等。

最近我遇到了由于没有使用双引号而导致 HTML 出错的情况,如果你查看 JSON 的规范,你会发现在引用字符串文字时需要使用双引号。因此,我认为历史原因上常见的做法是使用双引号。

然而!在编写服务器端 JS 的这些日子里,我必须承认我倾向于回到我的 C 根源,其中我使用双引号代替转义字符,单引号字符串实际上是文本字符,并且不太可能包含转义字符(尽管这基本上是无效行为)。另外,我的大部分 JS 现在都是 coffeescript ,毕竟没有人为了优雅而编写 javascript,但 CS 是一种完全不同的语言。


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