算术运算符

一元运算符

  • 递增递减操作符
  • 后置++,
    ,先使用a,后++,-- 。 前置++,–,先++,–,再使用a
  • 赋值运算符
  • 单个=表示赋值,将右侧的值赋给左侧的变量。 可以和其他算术运算符连用,常用的有*=,/=,%=,+=,-=
  • 加+ 相当于调用Number(),将其他数据类型转换为number类型
  • 减-
    1.将一元减应用于数值时,数值会变成负数。2. 将一元减应用于非数值时,遵循与一元加操作符相同的规则,最后将得到的数值转化为负数

比较运算符

  • !==
  • <

=

  • <=


  • ===

位运算符

  • & | 将值转成number的二进制,然后再进行与或操作
  • &
  • |

逻辑运算符

  • 逻辑与&&(同真才真,有假则假)
  • 可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型
  • 如果第一个操作数是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值
  • 如果第一个数为真,返回第二个数
  • var s1 = 8;
    var s2 = “briup”;
    var s3 = “”;
    var result = s1 && s2; var result2 = s3 && s2;
    //briup //空字符串
  • 逻辑或 ||(有真则真,同假才假)
  • 如果两个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值
  • 如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数
  • 如果第一个操作数是真,直接返回第一个操作数。
  • 非(NOT)
  • 该操作符应用任何类型数值都返回一个【布尔值】。先将任意类型的数值转换为Boolean,然后 取反
  • !a ==> !Boolean(a)
    !0 //true
    !"" //true
    !NaN //true
    !false //true
  • 连用两次逻辑非 ,就可以将任意数据类型转化为Boolean类型 !!a ==> Boolean(a)
    !!"" //false

三目运算符

  • variable = boolean_expression ? true_value : false_value;
  • 如果boolean_expression为true,将true_value赋给variable,否则将false_value赋给variable

内存空间

栈区

  • 基本数据类型的变量和值,都存放在栈区

堆区

  • 引用数据类型的变量存放到栈区,引用内存的地址存放到栈区,内容存放到堆区
    值传递与引用传递

基本数据类型之间使用值传递

  • 引用数据类型之间使用引用传递(地址传递/址传递,传递的是钥匙,房间还是同一个)

类型转换

其他数据类型转换为String

  • toString()函数
  • 除了null,undefined,其他三种基本数据类型的变量均有一个toString()函数,该函数可以获取该变量 指定值的字符串表示。
  • 如果变量为number类型,默认情况下toString()是以十进制格式返回数值的字符串表示,通过传递参 数,可以输入以二进制,八进制,十六进制乃至任意有效进制格式的字符串值
  • String()函数 包装器,转换器
  • 可以将其他任意基本数据类型的值转换为字符串,包括null,undefined
  • 使用拼接空字符串进行转换 +""

其他数据类型转换为Boolean

  • Boolean()包装器 或者使用!!转换
  • String
    非空字符串True
    ”” False
  • Number
    任何非0 True
    0/NaN. false
  • Object
    任何对象 true
    null false
  • Undefined
    不适用
    undefined false

其他数据类型转换为Number

  • Number()包装器
  • 如果转换的值是null,undefined,boolean,number
  • Number(true); //1 Number(false); //0 Number(null); //0 Number(undefined); //NaN Number(10);//10 如果是数字值,原样输出
  • 如果转换的值是string
  • parseInt()函数
  • 如果转换的值是null,undefined,boolean,均转换为NaN
  • 如果转换的值是Number
  • parseInt(10);//10 如果是整数值,原样输出
    parseInt(10.3);//10 如果是小数,舍去小数点一级后面的内容
  • 如果转换的值是string
  • parseFloat()函数
  • 如果转换的值是null,undefined,boolean,均转换为NaN
  • 如果转换的值是Number
  • parseFloat(10);//10 如果是整数值,原样输出
    parseFloat(10.1); //10.1 如果是小数,保留小数点,但是如果是10.0结果为10
  • 如果转换的值是string

加法+(m+n)

当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算



当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼 接



当m,n 有一个为对象,如果该对象既重写toString,又重写了valueOf方法,先调用valueOf方法获 取返回值,将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用 toString方法获取返回值,将该返回值和另外一个操作数进行运算。

  • var o = {name:“briup”,valueOf:function(){return “1”;}} o+1; //“11”

特别注意

默认情况下,ECMAScript会将小数点后带有6个零以上的浮点数转化为科学计数法。 0.0000003 => 3e-7

在进行算术计算时,所有以八进制十六进制表示的数值都会被转换成十进制数值。

保存浮点数需要的内存是整数的两倍,因此ECMAScript会不失时机将浮点转换为整数

例如:
var a = 1.;
var b = 1.0; //都将解析为1

避免测试某个特定的浮点数值,是使用IEEE754数值的浮点计算的通病

例如:
0.1+0.2 //结果不是0.3,而是0.30000000000000004