问题标签 [operator-precedence]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
3880 浏览

c# - int[] arr={0}; int 值 = arr[arr[0]++]; 值 = 1?

今天我看到了Eric Lippert的一篇文章,他试图澄清运算符优先级和评估顺序之间的神话。最后有两个代码片段让我感到困惑,这是第一个片段:

现在当我考虑变量 value 的值时,我只是简单地将其计算为 1。这就是我认为它的工作方式。

  1. 首先将 arr 声明为一个 int 数组,其中包含一个项目;该项目的值为 0。
  2. 在这种情况下,第二次获取 arr[0] --0 的值。
  3. 第三次获取 arr[步骤 2 的值] 的值(仍为 0) -- 再次获取 arr[0] -- 仍为 0。
  4. 第四步将步骤 3 (0) 的值赋给变量值。--value = 0 现在
  5. 添加到第 2 步的值 1 -- 现在 arr[0] = 1。

显然这是错误的。我试图在 c# 规范中搜索一些关于何时实际发生增量的明确声明,但没有找到任何内容。
第二个片段来自 Eric关于该主题的博客文章的评论:

现在这就是我认为这个程序将如何执行——在声明数组并将 1 分配给 i 之后。[请忍受我]

  1. 获取数据[i] --1
  2. 将值 5 --6 添加到第 1 步的值
  3. 将第 2 步的值赋给 data[i](仍为 1) --data[i] = 6
  4. 递增 i -- i = 2

根据我的理解,这个数组现在应该包含值 { 11、27、33 }。但是,当我循环打印得到的数组值时:{11、38、33}。这意味着增量发生在取消引用数组之前!
怎么会?这个帖子增量不应该是帖子吗?即发生在其他一切之后。
我想念什么?

0 投票
2 回答
4490 浏览

python - Python字符串格式化和字符串乘法奇数

Python 正在执行字符串乘法,我希望它执行数字乘法,但我不知道为什么。

即使将类型强制为整数也无济于事。(我意识到这是多余的,但对我来说这是一个白痴检查:

显然我解决了我的问题(添加括号就可以了)但是这里发生了什么?如果这只是我必须记住的一个怪癖,那很好,但我宁愿理解这背后的逻辑。

0 投票
4 回答
580 浏览

c# - 此 Console.WriteLine 语句中的错误在哪里?

如果您运行以下代码,您将获得输出:

答案是:<br>
<br>

第二行发生了什么,预计是:

答案是:<br>

只是为了澄清任何想知道的冲浪者的答案:

被评估为

0 投票
5 回答
2535 浏览

c++ - 我们如何解释表达式 (++x)+(++x)+(++x) 的结果?

我希望输出是11,但实际上是12。为什么?

0 投票
1 回答
2126 浏览

c++ - 初始化器列表 *argument* 评估顺序

因此,C++ 标准要求类成员按照它们在类中声明的顺序进行初始化,而不是按照它们在任何构造函数的初始化列表中的顺序进行初始化。但是,这并不意味着评估这些初始化的参数的顺序。我正在使用一个经常传递对序列化对象的引用的系统,并且想知道我是否可以确保以正确的顺序从中读取位,而与这些位写入对象字段的顺序无关。

显然,在声明中重新排序像intsand这样的东西doubles并不是什么大不了的事,但有时需要动态分配的更大的对象和东西就可以了。

0 投票
4 回答
1167 浏览

perl - Perl 如何决定在表达式中计算项的顺序?

给定代码:

我希望$x180

但相反的是30;但是,如果我更改条款的顺序:

我明白了180。我感到困惑的原因是perldoc perlop说得很清楚:

TERM 在 Perl 中具有最高优先级。它们包括变量、引号和类似引号的运算符、括号中的任何表达式,以及任何参数被括号括起来的函数。

由于($x += 5)是在括号中,它应该是一个术语,因此无论表达式的顺序如何,都首先执行。

0 投票
2 回答
102 浏览

linq-to-sql - linq2sql 如何处理只有 FK 的表?

我有一个映射表,如:

Article_to_Categories

文章ID 类别ID

如何使用 linq2sql 插入此表?

0 投票
5 回答
3504 浏览

javascript - 在Javascript中是否按顺序执行相等的超时?

假设我这样做

我可以确定 foo 会在 bar 之前开始执行吗?如果我使用 1、10 或 100 作为 bar 的超时值而不是 0,会怎样?

简单的实验表明,在超时值相等的情况下,超时目标的执行顺序与 setTimeouts 本身相同,但是依赖这种行为是否安全?

0 投票
7 回答
98855 浏览

javascript - Javascript 三元运算符的运算符优先级

我似乎无法与三元运算符结合使用此代码的第一部分( += )。

我认为这段代码的工作方式如下:

但这不正确,因为这会在我的控制台中出现错误。

所以我的问题是我应该如何正确地解释这段代码?

0 投票
6 回答
63969 浏览

c# - 每个循环的 C# 以什么顺序遍历 List?

我想知道 C# 中的 foreach 循环遍历System.Collections.Generic.List<T>对象的顺序。

我发现了另一个关于同一主题的问题,但我觉得它回答的问题令我满意。

有人说没有定义顺序。但正如其他人所说,它遍历数组的顺序是固定的(从 0 到 Length-1)。8.8.4 foreach 语句

也有人说,这同样适用于任何带有顺序的标准类(例如List<T>)。我找不到任何文档来支持它。所以据我所知,它现在可能会这样工作,但也许在下一个 .NET 版本中它会有所不同(即使它可能不太可能)。

我还List(t).Enumerator没有运气地查看了文档。

另一个相关问题指出,对于 Java,它在文档中特别提到:

List.iterator()以正确的顺序返回此列表中元素的迭代器。”

我正在 C# 文档中寻找类似的东西。

提前致谢。

编辑:谢谢你们所有的回答(很惊讶我得到这么多回复的速度)。我从所有答案中了解到的是,List<T>它总是按其索引的顺序进行迭代。但我仍然希望看到明确说明这一点的文档,类似于List.