Javascript如何处理BODMAS?

Jam*_*son 3 javascript math jquery

我正在使用Javascript为我正在进行的项目做一些数学计算,并且偶然发现了以下内容:

我正在计算结果列表中剩余的结果数量(有一个"加载更多"按钮)

代码如下:

if (data.length > startIndex + maxLoadAmount) {
    var loadMoreButton = new LoadButton()
    loadButton.ToLoad = data.length - startIndex + maxLoadAmount;

    loadMoreButton.click(function () {
    var amountOfCurrentWidgets = $(this).parent().children('.widget').length;
    this.remove();
        loadChildren(amountOfCurrentWidgets, selector, data, widgetType);
    });
    $(selector).append(loadMoreButton);
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时,我对结果感到惊讶!

在特定测试中,有16个可用的小部件,当从索引0开始,最多显示5个时,结果为21.

我在追加之前将其跟踪到javascript执行减法.你可以在jsfiddle中重现它:http: //jsfiddle.net/JamesPattison/3hvr4vsr/

解决方法是用括号括起来,虽然我想我真正要问的是:

我疯了吗?

T.J*_*der 7

在JavaScript中,加法和减法具有相同的优先级,并且都具有从左到右的关联性.所以用你小提琴中的代码:

var x = 16, y = 0, z = 5;
var result = x-y+z; //16-0+5, expected by BODMAS: 16-(0+5) = 11
$('#results').html(result.toString())
Run Code Online (Sandbox Code Playgroud)

result 计算方式如下:

(16 - 0) + 5
Run Code Online (Sandbox Code Playgroud)

这就是它在JavaScript,Java,C,C++,C#以及我能想到的所有其他语言中的评估方式.

只有这样,这将是不同的破碎是,如果另外有一个更高的比减法的优先级,如乘法的作用:

16 - 0 * 5 => 16 - (0 * 5)

但事实并非如此.


Re BODMAS,它应该写成:

B
O
DM
AS

来自WikiPedia关于操作顺序的文章:

当以这种方式编写时,这些助记符可能会产生误导,特别是如果用户不知道乘法和除法具有相同的优先级,加法和减法也是如此.

类似地,以下所有引用都表示在标准算术中,除法和乘法具有相同的优先级,加法和减法具有相同的优先级:

运营秩序: PEMDAS - purplemath.com:

记住操作顺序的常用技术是缩写"PEMDAS",它变成了"请原谅我亲爱的莎莉阿姨".它代表"括号,指数,乘法和除法,加法和减法".这告诉你操作的等级:括号超出指数,超出乘法和除法(但乘法和除法处于同一等级),这两个超出加法和减法(它们一起在最低等级)

数学步骤 - eduplace.com:

规则是:

  1. 乘以从左到右分开.
  2. 从左到右加减.

算术规则 - mathcentre.ac.uk:

这很难记住,所以这里有一个帮助你的首字母缩写词 - BODMAS.它的意思是:

在此输入图像描述

其中除法和乘法具有相同的优先级,并且加法和减法具有相同的优先级,因此在每种情况下我们将它们括在一起.