Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 街区风格真的这么重要吗?_Javascript - Fatal编程技术网

Javascript 街区风格真的这么重要吗?

Javascript 街区风格真的这么重要吗?,javascript,Javascript,我刚刚观看了道格拉斯·克罗克福德(Douglas Crockford)关于其2009年著作《JavaScript:好的部分》(JavaScript:The Good Parts)的介绍视频 在视频中,他解释说,以下块是危险的,因为它会产生无声错误: return { ok: false }; 事实上应该这样写(强调尽管表面上相同,但行为差异至关重要): 您可以在视频播放约32分钟后看到他的评论: 我以前没有听说过这一点,我想知道这一规则是否仍然适用,或者自这一声明发表以来,JavaSc

我刚刚观看了道格拉斯·克罗克福德(Douglas Crockford)关于其2009年著作《JavaScript:好的部分》(JavaScript:The Good Parts)的介绍视频

在视频中,他解释说,以下块是危险的,因为它会产生无声错误:

return
{
    ok: false
};
事实上应该这样写(强调尽管表面上相同,但行为差异至关重要):

您可以在视频播放约32分钟后看到他的评论:

我以前没有听说过这一点,我想知道这一规则是否仍然适用,或者自这一声明发表以来,JavaScript的开发是否已经克服了这一语法要求


我发现这非常有趣,因为我没有用这种方式编写代码,我想检查这些信息是否过期。

无声错误是返回了
未定义的

分号在JavaScript中是可选的,因此

return
{
    ok: false
};
被解析为

return;  // Leaves function straight away
{
    ok: false   
};
将识别此类模式并发出警告:

林特警告:意外的行尾;这些行是否是同一语句的一部分是不明确的

lint警告:缺少分号

林特警告:无法访问的代码

林特警告:无意义块;花括号没有影响


这在问题中已经讨论过了。

Javascript将在返回后插入分号,因为它“似乎丢失了”

下面是一个没有效果的{ok:false}块

所以这是javascript规范中的一个bug


我的建议是尽可能地运行jslint,并将其配置为在与Crockford不同时考虑您的风格。

规则仍然适用

由于该语言会自动插入“缺失”分号,因此第一个代码段被解释为:

return;

{
    ok: false
};

也就是说,返回未定义的
。如果以某种方式允许代码通过
return
语句运行,则会创建一个对象,但不会将其分配给任何有用的对象(变量)。

这是一个非常现实的问题。无意中返回null肯定会在代码中造成不好的结果

这条规则今天也适用,而且是“不好的部分”之一。第一个代码段将使函数返回未定义的

请参阅我关于这个主题的另一个答案:

Javascript非常“友好”,在某些情况下可以在换行符处使用分号。不久前我写了一篇关于这一点的博客:

关于return语句的部分如下:

然而,有几件事 你做不到。例如,如果你把 return关键字之间的换行符 这是一个论点,它突然有了一个 不同的意思。如果您格式化 代码如下:

然后它被解释为:

return语句接受 无参数形式和参数 成为它自己的陈述


想知道为什么人们决定让东西成为可选的,添加分号几乎不需要花费你什么。 但是调试这种情况可能非常耗时

更一般地说,为什么语言设计者一直认为代码应该从用户错误中自我修复。 如果人们犯了错误,就应该发出警告。否则你以后会越来越麻烦


而且我们知道,你越晚发现错误,代价就越高。

他是否解释了错误是什么以及行为差异是什么?是的,如果你看一看32分钟的视频,你就会看到他的完整解释。
return
使函数返回
未定义
,而不是
,返回
未定义
,而不是
,否?@Delan@Matt当然,已更正。干杯。也在上讨论;)返回一个
未定义的
,而不是
空的
。。。
return;

{
    ok: false
};
function getAnswer() {
  var answer = 42;
  return
    answer;
} 
function getAnswer() {
  var answer = 42;
  return;
  answer;
}