在val中设置变量

nor*_*can 11 javascript jquery coding-style

这似乎有效,但有任何理由我不应该这样做吗?它为我节省了一行代码,让我设置一个变量和一个文本区域的值.

$('#price').val(default_price = 2.9);
Run Code Online (Sandbox Code Playgroud)

它相当于:

default_price = 2.9;
$('#price').val(default_price);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 18

它嵌入代码在代码中做一件事做一些完全不同的事情.

特别是如果你在谈论默认值,"常量"等,将初始化与UI交互混淆会导致混淆.将它们分开 - 更容易找到和维护.

从技术上讲,这是一回事.在认知上它不是.

ov引发了全球命名空间污染的幽灵.通过在任意位置声明变量,可以增加覆盖值的几率,指责标识符,重复工作等等.

除了创建难以隔离的错误之外,这还是一个额外的认知负载,因为您必须了解声明的变量的范围,找到它可能使用的位置等.

  • 我也投票支持两行.永远不要容易理解或维护易于书写(单行).理解对其他人的代码工作很重要.保持代码易于维护对每个人都更好. (7认同)

o.v*_*.v. 9

我会接受这样的想法,这种构造在某些情况下是可以接受的,但不是这个,特别是因为在给定的例子中还有其他风格问题(最大的一个是"魔法数字来自哪里")

主要关注IMO是否已声明变量 - 您不能简单地说

$('#price').val(var default_price = 2.9); //nope
Run Code Online (Sandbox Code Playgroud)

如果原始代码与尚未声明的变量一起使用,则最终会污染全局范围.但是,如果变量已经被宣布,它带来了一个后续问题"为什么它没有被声明为正确的默认值".或者,根据(未知)条件,幻数可能会有所不同:

if (/*whatever*/) {
  $('#price').val(default_price = 2.9);
} else {
  $('#price').val(default_price = 9522); //over 9000
}
Run Code Online (Sandbox Code Playgroud)

同样,这在风格上很差,因为设置#price应该在条件(或switch法定)之外执行的值:

if (/*whatever*/) {
  default_price = 2.9;
} else {
  default_price = 9522;
}
$('#price').val(default_price);
Run Code Online (Sandbox Code Playgroud)

可能存在一个复杂的情况,其中变量setter被覆盖以返回除分配值之外的其他东西,这在IMO首先是一个有问题的实践.