首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >除了JavaScript之外,是否有其他语言在大括号开始位置(同一行和下一行)之间存在差异?

除了JavaScript之外,是否有其他语言在大括号开始位置(同一行和下一行)之间存在差异?
EN

Stack Overflow用户
提问于 2012-02-08 18:46:02
回答 3查看 2.6K关注 0票数 91

今天,当我随意阅读JavaScript patterns‘’Reilly这本书时,我发现了一件有趣的事情(请参阅第27页)。

在Javascript中,在某些情况下,如果大括号开始位置不同,则会有所不同。

代码语言:javascript
复制
function test_function1() {
    return
    {
        name: 'rajat'
    };
}

var obj = test_function1();
alert(obj);  //Shows "undefined"

代码语言:javascript
复制
function test_function2() {
    return {
        name: 'rajat'
    };
}

var obj = test_function2();
alert(obj); //Shows object

JSfiddle Demo

有没有其他语言有这样的行为呢?如果是这样的话,我就必须改变我的习惯了..:)

我主要关心PHP、C、C++、Java和ruby。

EN

回答 3

Stack Overflow用户

发布于 2012-02-08 18:49:09

如果JavaScript解释器找不到;,它会自动在每一行的末尾添加一个here (除了一些例外,这里不会涉及到它们:)。

因此,基本上问题不是大括号的位置(这里表示的是对象文字,而不是大多数语言中的代码块),而是这个小“特性”,它迫使您的第一个示例使用return ; => undefined。您可以查看return in the ES5 spec的行为。

对于具有类似行为的其他语言,请查看Konrad's answer

票数 40
EN

Stack Overflow用户

发布于 2012-02-11 04:22:31

JSLint使用该语法报告了几个警告:

代码语言:javascript
复制
$ jslint -stdin
function foo(){
  return
  { x: "y" };
}
^D
(3): lint warning: unexpected end of line; it is ambiguous whether these lines are part of the same statement
  return
........^

(3): lint warning: missing semicolon
  { x: "y" };
..^

(3): lint warning: unreachable code
  { x: "y" };
..^

(3): lint warning: meaningless block; curly braces have no impact
  { x: "y" };
..^

(3): lint warning: use of label
  { x: "y" };
.....^

(3): lint warning: missing semicolon
  { x: "y" };
...........^

(3): lint warning: empty statement or extra semicolon
  { x: "y" };
............^


0 error(s), 7 warning(s)
票数 6
EN

Stack Overflow用户

发布于 2012-02-17 04:15:57

我遇到的第一种语言是awk (它也有自己的语法“怪异”;可选的分号、仅使用空格的字符串连接等等)我认为DTrace的设计者有足够的判断力不去复制这些特性,但是我想不起来了。一个简单的例子(在我的Mac中计算DTD中实体标签的数量):

代码语言:javascript
复制
$ cat printEntities.awk 
# This prints all lines where the string ENTITY occurs
/ENTITY/ {
  print $0
}
$ awk -f printEntities.awk < /usr/share/texinfo/texinfo.dtd | wc -l
     119

如果这个小脚本是在它自己的一行上用大括号编写的,那么将会发生以下情况:

代码语言:javascript
复制
$ cat printAll.awk 
# Because of the brace placement, the print statement will be executed
# for all lines in the input file
# Lines containing the string ENTITY will be printed twice,
# because print is the default action, if no other action is specified
/ENTITY/
{ 
   print $0 
}
$ awk -f printAll.awk < /usr/share/texinfo/texinfo.dtd | wc -l
     603
$ /bin/cat < /usr/share/texinfo/texinfo.dtd | wc -l
     484
$ 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9191776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档