这似乎有效并且有效,但是有什么理由我不应该这样做吗?它为我节省了一行代码,让我可以设置一个变量和一个文本区域的值。
$('#price').val(default_price = 2.9);
这相当于:
default_price = 2.9;
$('#price').val(default_price);
这似乎有效并且有效,但是有什么理由我不应该这样做吗?它为我节省了一行代码,让我可以设置一个变量和一个文本区域的值。
$('#price').val(default_price = 2.9);
这相当于:
default_price = 2.9;
$('#price').val(default_price);
它将做一件事的代码嵌入到做完全不同的事情的代码中。
特别是如果您在谈论默认值、“常量”等,将初始化与 UI 交互混为一谈会导致混淆。将它们分开——更容易找到和维护。
从技术上讲,它是一样的。认知上不是。
ov 引发了全局命名空间污染的幽灵。通过在任意位置声明变量,您增加了覆盖值、粗手指识别标识符、重复工作等的几率。
除了创建难以隔离的错误之外,这是一个额外的认知负担,因为您必须了解声明的变量的范围,定位它可能被使用的其他地方等。
我会认为这样的结构在某些情况下是可以接受的,但不是这个,特别是因为在给定的示例中还有其他风格问题(最大的问题是“幻数从何而来”)
IMO 的主要关注点是变量是否已被声明——你不能简单地
$('#price').val(var default_price = 2.9); //nope
如果原始代码与尚未声明的变量一起使用,您最终会污染全局范围。但是,如果变量已经被声明,它会带来一个后续问题“为什么没有用正确的默认值声明它”。或者,根据(未知)条件,幻数可能会有所不同:
if (/*whatever*/) {
$('#price').val(default_price = 2.9);
} else {
$('#price').val(default_price = 9522); //over 9000
}
同样,这在风格上很糟糕,因为设置 的值#price
应该在条件(或switch
语句)之外执行:
if (/*whatever*/) {
default_price = 2.9;
} else {
default_price = 9522;
}
$('#price').val(default_price);
可能存在一个复杂的情况,其中变量设置器被覆盖以返回分配的值以外的东西,这首先是 IMO 的一个有问题的做法。
我不会像你那样使用它——因为我总是更喜欢对象将奇异值存储为一个集合,即:
var defaults = {
"price" : 2.9
};
(这样做的原因是它更易于导出、更便携,并且使用 JavaScript 无法在创建变量后正确删除它 - 而您可以从对象中删除任意数量的键)
但是,我确实使用了您在if statements
. 那里有很多编码人员会抱怨它,但对我来说,将某些东西的结果分配给一个 var - 然后你正在测试它是否存在 - 然后在同一个中使用if block
是非常有意义的,在我看来会导致更具可读性的代码,因为所有内容都位于同一区域:
var view;
if ( (view = someClass.thatChecksAndLoads('a view')) ) {
/// do something with the view
}
以上内容非常适合您有多种获取view
对象的方式的情况,例如:
if ( (view = someClass.thatChecksAndLoads('a view')) ) {
/// do something with the view
}
else if ( (view = anotherWay.toLoad('a view')) ) {
/// do something here instead
}
作为旁注 - 以防万一有人想知道 - 我不只是在上面无缘无故地放入额外的括号。如果 if 语句中有一个单数“=”,相当多的 JavaScript 编译器(以及 ActionScript 编译器)会抱怨/记录错误。这一切都是因为他们试图提供帮助,以防你的意思是'=='......通过将赋值括在括号中,这通常会绕过检查,或者至少它会阻止发出警告。