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