Javascript核心读书有感之表达式和运算符(5)

运算符的优先级和结合性规定了它们在赋值的运算式中的运算顺序,但并没有规定字表达式的计算过程中的运算顺序。javascript总是严格按照从左至右的顺序计算表达式,例如:

在表达式 w=x+y*z 中,将首先计算表达式w,然后计算x、y和z,然后,y的值和z相乘,在加上x的值。最后将其表达式w所指代的变量或属性。给表达式添加园括号将会改变乘法,加法和赋值运算的关系。但从左至右的顺序是不会改变的。

8.算术表达式

本节涵盖了那些算术计算的运算符、以及对操作数的算术操作。乘法、除法和减法运算符非常简单。加法运算单独一节,因为加法运算符可以操作字符串的连接,并且其类型转换有些特殊。

基本的算术运算符是*、/、%、+、-。除了+加法,其它的运算符特别简单,只是在必要的时候操作符转化为数字而已,然后求积、商、余(模)和差。所有那些无法转换为数字的操作都将转换为NaN值。如果操作数(或者转换结果)是NaN值,算术运算结果也是NaN

运算符“/”用第二个操作数来除以第一个操作数,如果你使用过那些区分整数型和浮点数型的编程语言。那么用一个整数除以一个整数时,则希望得到的结果也是整数。在javascript中所有的数字都是浮点数型的,除法运算的结果也是浮点型。比如5/2结果是2.5,而不是2。除数为0的运算结果为正无穷大或负无穷大。而0/0的结果是NaN。所有这些运算均不会报错。

运算符“%”计算的是第一个操作数对第二个操作数的模,换句话说,就是第一个操作数除以第二个操作鼠的余数。结果的符号和第一个操作鼠(被除数)符号保持一致。例如5%2的结果为1,-5%2为-1。

求余运算符的操作数通常都是整数,但也适用于浮点数。6.5%2.1结果是0.2。(0.19999999999999973)

i.“+”运算符

二元加法运算符“+”可以对两个数字做加法,也可以做字符串连接操作:

复制代码 代码如下:


         1+2 //=> 3
        "hello" + "" + "there" // =>"hello there"
        "1"+"2" //=>"12"

当两个操作数都是数字或都是字符串的时候,计算结果是显而易见的。然而对于其他情况来说,则要进行一些必要的类型转换。并且运算符的行为依赖于类型的转换的结果。从技术上来讲,加法操作符的行为表现为:

如果一个操作数是对象,则对象会遵循对象到原始值的转换规则为原始类值(参照3章8节3小节)。日期对对象toString()方法执行转换,其他对象则通过valueOf()方法执行转换(如果valueOf()方法返回一个原始值的话)。由于多数对象都不具备可用的valueOf()方法,因此他们会通过toString()方法来执行抓换
在进行了对象到原始值的转换后,如果其中一个操作鼠是字符串的话,另一个操作数也会转换为字符串。然后进行字符串连接。
否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。
这里有一些例子

复制代码 代码如下:


            1 + 2 //=>3 加法
                "1" + "2" //=>"12" 字符串连接
            "1" + 2 //=>"12"数字转换为字符串后进行字符串连接
             1 + {} //=>"1[object object]":对象转换为字符串后进行字符串连接
            true + true //=>2 布尔值转换为数字后做加法
             2 + null //=>2 null转换为0后做加法
             2 + undefined //=>NaN undefined转换为NaN做加法

最后,特别要注意的是。当加号运算符合字符串一起使用时,要考虑加法对运算顺序的影响。也就是说,运算结果是依赖于运算符的运算顺序的,比如

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgffgj.html