今天,当我随意阅读JavaScript patterns‘’Reilly这本书时,我发现了一件有趣的事情(请参阅第27页)。
在Javascript中,在某些情况下,如果大括号开始位置不同,则会有所不同。
function test_function1() {
return
{
name: 'rajat'
};
}
var obj = test_function1();
alert(obj); //Shows "undefined"
而
function test_function2() {
return {
name: 'rajat'
};
}
var obj = test_function2();
alert(obj); //Shows object
有没有其他语言有这样的行为呢?如果是这样的话,我就必须改变我的习惯了..:)
我主要关心PHP、C、C++、Java和ruby。
发布于 2012-02-08 18:49:09
如果JavaScript解释器找不到;
,它会自动在每一行的末尾添加一个here (除了一些例外,这里不会涉及到它们:)。
因此,基本上问题不是大括号的位置(这里表示的是对象文字,而不是大多数语言中的代码块),而是这个小“特性”,它迫使您的第一个示例使用return ;
=> undefined
。您可以查看return
in the ES5 spec的行为。
对于具有类似行为的其他语言,请查看Konrad's answer。
发布于 2012-02-11 04:22:31
JSLint使用该语法报告了几个警告:
$ 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)
发布于 2012-02-17 04:15:57
我遇到的第一种语言是awk (它也有自己的语法“怪异”;可选的分号、仅使用空格的字符串连接等等)我认为DTrace的设计者有足够的判断力不去复制这些特性,但是我想不起来了。一个简单的例子(在我的Mac中计算DTD中实体标签的数量):
$ 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
如果这个小脚本是在它自己的一行上用大括号编写的,那么将会发生以下情况:
$ 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
$
https://stackoverflow.com/questions/9191776
复制相似问题