<!-- 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);
说明:
我最初不确定 (data = new MyObject())
实际上做了什么。我想知道为什么不将该表达式分隔在它自己的行中,而不是在 .data()
中进行。问题是在 .data()
中或单独执行该表达式之间是否存在任何差异。
最佳答案
In JavaScript, the expression e.g.
(data = new MyObject())
evaluates toMyObject
object; whereas, in a language like C, the value of an expression is alwaystrue
不,在 C 中就像在 JavaScript 中一样,类似表达式的结果是对 MyObject
对象的引用。不过,非null
对象引用是真实的(在两种语言中)。
在语法上从 B 派生的所有语言(包括 C、Java、JavaScript、C# 以及大约十几种),以及可能来自其他家族的大多数语言,赋值表达式的结果是该表达式的右侧。例如:
a = b = c;
...的意思是“将c
的值赋给b
,然后再将它赋给a
而不重新求值”。它不的意思是“将c
分配给b
,然后将true
分配给a
”。我不知道有哪一种语言会这样(这并不意味着它不存在)。在某些语族中,它的意思是“将 b
与 c
进行比较,并将比较的结果分配给 a
”(不更改 b
或 c
),因为 =
在这些语言中根据上下文作为赋值运算符和比较运算符执行双重任务,并且在该上下文中(a 右侧 生产),它是一个比较运算符。 (BASIC 语言就是这样。)
这不是真正的答案,因为没有问题。但希望它能有所帮助...
关于javascript - JavaScript 中的赋值操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353403/