首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript中的赋值运算值

JavaScript中的赋值运算值
EN

Stack Overflow用户
提问于 2012-11-12 23:34:33
回答 2查看 103关注 0票数 1
代码语言:javascript
运行
复制
<!-- 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())是否仅用于实现以下操作的快捷方式?

代码语言:javascript
运行
复制
...
var $my_div = $('#target'),
    data = new MyObject();
$my_div.data('extra', data);

Clarifications:我最初并不确定(data = new MyObject())到底做了什么。我想知道为什么不在自己的行中分隔这个表达式,而不是在.data()中这样做。问题是,在.data()或单独执行该表达式之间是否有任何区别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-12 23:43:37

在大多数语言中,赋值运算符实际上计算赋值的值(=与JavaScript中的相同)。例如,在C代码中看到类似下面的内容是很常见的:

代码语言:javascript
运行
复制
MyObject* config = NULL;
if (config = parse_config()) {
   // config is not NULL
}

这只是一个特定语言如何解释某事的问题(例如,如果它将非空指针视为真)。有些(如C#或Java)不需要并要求您具有特定的特性,例如:

代码语言:javascript
运行
复制
MyObject config = null;
if ((config = ParseConfig() != null) {
   // config is not null
}

然而,它似乎没有那么可读性,所以很少有人支持它。

至于你的问题,这些例子也是如此--没有发现隐藏的魔法:)

票数 1
EN

Stack Overflow用户

发布于 2012-11-12 23:36:51

在JavaScript中,表达式(例如,(data = new MyObject()) )计算为MyObject对象;而在C这样的语言中,表达式的值总是true

不,在C中和在JavaScript中一样,类似表达式的结果是对MyObject对象的引用。但是,非null对象引用是真实的(在两种语言中)。

在所有从语法上派生自B的语言中(包括C、Java、JavaScript、C#和其他十几种语言),或者大多数来自其他家族的语言,赋值表达式的结果是该表达式的右侧。例如:

代码语言:javascript
运行
复制
a = b = c;

...means“将c的值赋值给b,然后再次将其赋值给a而不进行重新计算”。这并不意味着“将c分配给b,然后将true分配给a”。我不知道有一种语言,它会意味着(这并不意味着一种不存在)。在某些语言家族中,它的意思是“将bc进行比较,并将比较的结果分配给a”(而不更改bc),因为在这些语言中,=作为赋值操作符和作为比较运算符的双重职责取决于上下文,而在这种上下文中(右侧的生产),=是一个比较运算符。(基本语言就是这样。)

这并不是真正的答案,因为这是毫无疑问的。但希望它能帮上忙。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13353403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档