算术运算符
一元运算符
- 递增递减操作符
- 后置++,
,先使用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