逗号作为分隔符vs.逗号作为分隔符


13

此视频中,演讲者说:

“有些人对逗号的工作方式感到困惑。他们认为它们应该是定界符而不是分隔符。现在您可以以任何一种方式来考虑它们。”

我不明白分隔符和分隔符(如果有)之间的区别。视频中的含义是,现在(尾随逗号是有效的),人们可以将它们视为定界符,而不是分隔符...

顺便说一句,该语言是JavaScript。据我了解,逗号令牌有两个含义:

  • 作为操作员(很少使用)
  • 作为分隔符(在参数和参数列表,数组和对象文字等中)

我不确定逗号分隔符如何适合这个...


2
为什么这么重要?
jfriend00 2011年

7
@ jfriend00如果条件分隔符,分隔符之间的区别,我想知道......我想知道的东西:)
森那维达斯

3
@ jfriend00观看视频。如果IE浏览器的人们没有像您这样狭thinking地思考,也许我们不会再有另一个javascript可移植性
冒充

3
@ŠimeVidas好问题。顺便说一句,演讲者是Yahoo的高级JavaScript架构师Douglas Crockford,他以普及JSON着称,并且是JavaScript:The Good Parts的作者。最好您注意细节,尤其是在观看Crockford视频时,因为他很少为无关紧要的事情浪费时间。
yannis 2011年

1
@YannisRizos是的,我知道Crockford。他是一位伟大的教育家。:)
森那维达斯

Answers:


15

如果将逗号视为分隔符,则在序列的两个项目之间使用逗号将它们分开,如果将其视为定界符,则将其放在每个项目之后以指示项目的结尾。请参阅以下示例:

以逗号分隔

var myCars = ["Saab", "Volvo", "BMW" ];

逗号作为分隔符

var myCars = ["Saab", "Volvo", "BMW", ];

我认为视频说明您可以将逗号视为分隔符和分隔符,因为上述两个数组示例均有效。另一方面,在Javascript中,您只能在函数的参数列表中使用逗号作为分隔符,例如

foo(a, b, c) // separator, OK

是有效的,而

foo(a, b, c,) // delimiter, NOT OK!

无效。

编辑

据我了解,根据Wikipedia页面,分隔符分隔符的一种特殊情况,即分隔符被放置在需要标记边界的不同文本区域之间。实际上,维基百科页面使用逗号分隔的值作为分隔符的示例。因此,通常可以以不同的方式使用定界符:在要标记的文本部分的两侧之前,之后,两侧。

我将分隔符解释为Javascript上下文中的“放在项目后的标记” 的原因是由于数组文字示例的原因,该示例对C,C ++和Java也有效(我认为我至少看到了一个问题关于此主题的堆栈溢出)。

类似但不同的字符用法的另一个示例是使用分号作为语句定界符(C,C ++,Java,Ada等)和作为语句分隔符(Pascal)。因此

if (a > 0)
    printf("Positive\n");
else
    printf("Non positive\n");

是正确的C代码,而

IF a > 0 THEN
    WriteLn('Positive'); (* Syntax error here! *)
ELSE
    WriteLn('Non positive');

是不正确的Pascal代码。

也许终止定界符更好/更少歧义?例如,可以这样写这样的报价:“有些人对逗号的工作方式感到困惑。他们认为它们应该是项目终止符,而不是项目分隔符。现在(在许多情况下,您可以以任何一种方式考虑它们。”


是的,在参数列表中,逗号必须用作分隔符,而在数组文字中,逗号可以用作分隔符或定界符。或用外行的话来说:您可以在最后一个数组元素后面加上逗号,但不必这样做。
森那维达斯

虽然您的回答确实很好地解释了我的问题的引文,但Wikipedia页面上的“分隔符”提供了不同的定义。根据该文章,定界符指定区域之间的边界。因此,上述问题中的“逗号分隔符”示例将称为“逗号字段定界符”,而该Wiki页面上的任何地方都没有“逗号分隔符”示例。
森那维达斯

@ŠimeVidas-Wikipedia只是与其他任何参考文献一样的参考文献,它不是唯一的参考文献。
迈克尔·赖利

@CapeCodGunny是的,我只是指出存在面对的定义。我也想从其他参考资料中看到定义。
西米·维达斯

7

在两个值之间放置一个分隔符,将它们分隔开。

one,two,three

定界符将对字段进行定界-它在两侧。

,one,two,three,

如果采用这种方式,只要可以将单独的字段提取出来,就没有什么区别。

这与在诸如javascript之类的编程语言中使用逗号完全不同。它是关于在字符串中定界/分隔值。


1
嗯,这很有道理。
西米·维达斯

我不同意您对定界符的解释。根据您的解释,定界符将在两边,一个,两个,三个。
Michael Riley-AKA Gunny,

1
@CapeCodGunny-您误解了。我给出的示例在每个值前后都有一个逗号。不在字符串开头和结尾的逗号用作结束定界符开始定界符。
奥德

@Oded这篇Wikipedia文章提供了不同的定义。根据它,您的第一个示例将是一个字段分隔符,而您的第二个示例在该文章中根本没有出现。
森那维达斯

1
注意的话!var myNumbers = ['one','two','three', ];(到底逗号)会给阵列长度为3,但是,因为在前面的逗号的var myNumbers = [,'one','two','three'];给出长度4
RBT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.