JavaScript运算符

算数运算符

+ - * / %(取余符号) 
  1. 不同数据类型之前是没有办法进行运算。自动数据类型转换:那么不同数据类型的数据,需要先自动数据类型转换成同一数据类型,再进行后续的运算。
  2. 任何类型的数据和字符串类型的数据做相加(+)操作时,其他数据类型会自动的转换为字符串类型。此时的相加(+)不再是数学意义上的加法,而是表示“拼接”的意思。
  3. 字符串做相加运算之外的运算,那么字符串会先转成数字,再进行运算。
 1. "100"纯数字字符的字符串,可以直接转成数字
2. "100a"有非数字字符的字符串,转成NaN(not a number)
3. 任何数据和NaN做数学运算,都是NaN。
  1. 除字符串以外的数据,和数字进行算数运算的时候,将别的数据类型先转成数字再进行运算。

  2. 计算机在进行算数运算的细节:

    1. 计算机在进行小数运算的时候,绝对有误差(尽量使用整数计算)
    2. 除数可以为0

赋值运算符

  • 普通赋值运算:=

    功能:将等号右边的值,赋值给等号左边的变量。

  • 复合赋值运算:x=

    += -= *= /= %=

表达式

将任何运算符和操作数组合的式子叫做表达式。

  • 表达式的值
  • 表达式的功能

一元运算符:

a++ ++后置,先取a的值,然后对a进行+1操作
++a ++前置,先对a进行+1操作,然后取a的值
a-- --后置,先取a的值,然后对a进行-1操作
--a --前置,先对a进行-1操作,再去a的值

关系运算符

>  <  >=  <=  ==  !=  判断值相等
=== !==  既得判断值相等,还需要判断数据类型也相等。

关系运算里面的规则(自动数据类型转换):

  1. 和其他运算符一样,当关系运算符操作非数值时要遵循以下规则:

    1. 两个操作数都是数值,则数值比较;
      1. 两个操作数都是字符串,则比较两个字符串对应的字符编码值;
        <1>如果都是单个字符,直接比较ASCII码值大小
        <2>逐位进行比较(第一位和第一位比较,第二位和第二位比较...)
        一旦比较出大小,直接得出结果。
      2. 两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较;
  2. 在相等和不等的比较上,如果操作数是非数值,则遵循以下下规则:

    1. 一个操作数是布尔值,则比较之前将其转换为数值,false 转成 0,true 转成 1;
      1. 一个操作数是字符串,则比较之前将其转成为数值再比较
      2. 一个操作数是 NaN,则==返回 false,!=返回 true;并且 NaN 和自身不等;

逻辑运算符

  • 与运算

    格式:表达式1 && 表达式2
     规则:两个表达式都为true的时候,才为true。
     短路操作:如果表达式1为false,那么表达式2就不执行了,直接得结果为false。
  • 或运算

    格式:表达式1 || 表达式2

    规则:两个表达式都为false的时候,才为false。
    短路操作:如果表达式1为true,那么表达式2就不执行了,直接得结果为true。
  • 非运算

    格式:!表达式

    规则:现将原有的表达式自动数据类型转换成布尔值,然后取反。
    规律:
        1.操作数是一个空字符串,返回 true;
        2.操作数是一个非空字符串,返回 false;
        3.操作数是数值 0,返回 true;
        4.操作数是任意非 0 数值(包括 Infinity),false;
        5.操作数是 NaN,返回 true;
        6.操作数是 undefined,返回 true;
    口诀:非0即真,非空即真。