javascript - JavaScript 中的赋值操作值

标签 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()) 是否只是为了快捷方式做与下面完全相同的事情?

...
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 to MyObject object; whereas, in a language like C, the value of an expression is always true

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

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

a = b = c;

...的意思是“将c的值赋给b,然后再将它赋给a而不重新求值”。它的意思是“将c分配给b,然后将true分配给a ”。我不知道有哪一种语言会这样(这并不意味着它不存在)。在某些语族中,它的意思是“将 bc 进行比较,并将比较的结果分配给 a”(不更改 b c),因为 = 在这些语言中根据上下文作为赋值运算符和比较运算符执行双重任务,并且在该上下文中(a 右侧 生产),它是一个比较运算符。 (BASIC 语言就是这样。)

这不是真正的答案,因为没有问题。但希望它能有所帮助...

关于javascript - JavaScript 中的赋值操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353403/

相关文章:

javascript - 无法从维基百科 API 获取数据

javascript - 如何在jQuery中通过Request Body提交JSON数据?

javascript - 如何从 Javascript 对象中的属性路径查找对象值

javascript - 在 javascript click() 中获取 php 变量?

javascript - 为什么要在 ReactJS 函数中使用函数?

javascript - Canvas drawImage 不工作

javascript - 尝试附加基本 html 时,Node.appendChild 的参数 1 不是对象

javascript - 有没有办法返回其中包含变量的字符串?

javascript - jQuery 下拉菜单实现

javascript - 为拖放插件创建句柄功能 - jquery