<!-- HTML -->
<div id="target"></div>
// JavaScript
function MyObject() {}
var $my_div = $('#target'),
data;
$my_div.data('extra', (data = new MyObject()));在JavaScript中,表达式(例如,(data = new MyObject()) )计算为MyObject对象;而在C这样的语言中,表达式的值总是true。
在上面的代码片段中,(data = new MyObject())是否仅用于实现以下操作的快捷方式?
...
var $my_div = $('#target'),
data = new MyObject();
$my_div.data('extra', data);Clarifications:我最初并不确定(data = new MyObject())到底做了什么。我想知道为什么不在自己的行中分隔这个表达式,而不是在.data()中这样做。问题是,在.data()或单独执行该表达式之间是否有任何区别。
发布于 2012-11-12 23:43:37
在大多数语言中,赋值运算符实际上计算赋值的值(=与JavaScript中的相同)。例如,在C代码中看到类似下面的内容是很常见的:
MyObject* config = NULL;
if (config = parse_config()) {
// config is not NULL
}这只是一个特定语言如何解释某事的问题(例如,如果它将非空指针视为真)。有些(如C#或Java)不需要并要求您具有特定的特性,例如:
MyObject config = null;
if ((config = ParseConfig() != null) {
// config is not null
}然而,它似乎没有那么可读性,所以很少有人支持它。
至于你的问题,这些例子也是如此--没有发现隐藏的魔法:)
发布于 2012-11-12 23:36:51
在JavaScript中,表达式(例如,
(data = new MyObject()))计算为MyObject对象;而在C这样的语言中,表达式的值总是true
不,在C中和在JavaScript中一样,类似表达式的结果是对MyObject对象的引用。但是,非null对象引用是真实的(在两种语言中)。
在所有从语法上派生自B的语言中(包括C、Java、JavaScript、C#和其他十几种语言),或者大多数来自其他家族的语言,赋值表达式的结果是该表达式的右侧。例如:
a = b = c;...means“将c的值赋值给b,然后再次将其赋值给a而不进行重新计算”。这并不意味着“将c分配给b,然后将true分配给a”。我不知道有一种语言,它会意味着(这并不意味着一种不存在)。在某些语言家族中,它的意思是“将b与c进行比较,并将比较的结果分配给a”(而不更改b或c),因为在这些语言中,=作为赋值操作符和作为比较运算符的双重职责取决于上下文,而在这种上下文中(右侧的生产),=是一个比较运算符。(基本语言就是这样。)
这并不是真正的答案,因为这是毫无疑问的。但希望它能帮上忙。
https://stackoverflow.com/questions/13353403
复制相似问题