操作符
算数运算符
运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
var n = 10;
var o = 3;
console.log(n+o,n-o,n*o,n/o,n%o);
//13 7 30 3.3333333333333335 1
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑与(同真才真,有假则假) |
‘双竖线’ | 逻辑或(有真则真,同假才假) |
! | 逻辑非 |
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && (3 === 4)); // false
console.log("Cat" && "Dog"); // "Dog"
console.log(false && "Cat"); // false
console.log("Cat" && false); // false
console.log("" && false); // ""
console.log(false && ""); // false
console.log(true || true); // true
console.log(false || true); // true
console.log(true || false); // true
console.log(false || (3 === 4)); // false
console.log("Cat" || "Dog"); // "Cat"
console.log(false || "Cat"); // "Cat"
console.log("Cat" || false); // "Cat"
console.log("" || false); // false
console.log(false || ""); // ""
console.log(!true); // false
console.log(!false); // true
console.log(!""); // true
console.log(!"Cat"); // false
详细学习: 博客地址
一元运算符
递增递减操作符
运算符 | 描述 |
---|---|
++ | 递加 |
– | 递减 |
var a=3;
a++;//4
var iNum = 10;
--iNum;
alert(iNum); //输出 "9"
alert(--iNum); //输出 "8"
alert(iNum); //输出 "8"
//与前缀式运算符不同,后缀式运算符是在计算过包含它们的表达式后才进行增量或减量运算的
var iNum = 10;
iNum--;
alert(iNum); //输出 "9"
alert(iNum--); //输出 "9"
alert(iNum); //输出 "8"
详细学习: 博客地址
赋值运算符
运算符 | 描述 |
---|---|
= | x=y等同于x=y |
+= | x+=y等同于x=x+y(加法运算或连接操作并赋值) |
-= | x-=y等同于x=x-y(减法运算并赋值) |
*= | x*=y等同于x=x*y(乘法运算并赋值) |
/= | x/=y等同于x=x/y |
%= | x%=y等同于x=x%y |
详细学习: 博客地址
三元运算符
运算符 | 描述 |
---|---|
? | 条件表达式?语句1:语句2; |
执行的流程:
①条件运算符在执行时,首先对条件表达式进行求值
如果该值为true,则执行语句1,并返回执行结果
如果该值为false,则执行语句2,并返回执行结果
②如果条件的表达式的求值结果是一个非布尔值;
会将其转换为布尔值,然后再运算
var money=10000;
if(money>5000){
console.log("富有");
}else{
console.log("贫穷");
}//富有
//使用三元运算符后↓
var money =10000;
money >5000?console.log("富有"):console.log("贫穷");//富有
比较运算符
运算符 | 描述 |
---|---|
== | 等于(会自动转换数据类型再比较) |
=== | 等值等型(不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较) |
!= | 不相等 |
!== | x不等值或不等型 |
> | 大于 |
< | 小于 |
>= | x大于或等于 |
<= | 小于或等于 |
console.log(NaN==NaN);//false NaN这个特殊的Number与所有其他值都不相等,包括它自己
console.log(false==0);//true
console.log(false===0);//false
console.log(100>1000);//false
console.log(undefined==null,null==0,null=='');//true false false
类型转换
其他数据类型转换为String
toString()函数
除了null,undefined,其他三种基本数据类型的变量均有一个toString()函数,该函数可以获取该变量
指定值的字符串表示。
var a=12;
var b=a.toString();
var c=true;
var d=c.toString();
console.log(a,typeof a,b,typeof b);
//12 number 12 string
console.log(c,typeof c,d,typeof d);
//true boolean true string
var e=undefined;
var f=e.toString();
console.log(e,typeof e,f,typeof f);
//TypeError: Cannot read property 'toString' of undefined
String()函数
‘’ 或者 “” 底层的本质其实就是调用 String() 函数
可以将其他任意基本数据类型的值转换为字符串,包括null,undefined
var e=undefined;
var f=e+'';
console.log(e,typeof e,f,typeof f);
//undefined undefined undefined string
var g=1000;
var h=g+"";
console.log(g,typeof g,h,typeof h);
//1000 number 1000 string
其他数据类型转换为Boolean
Boolean()函数
任意其他数据类型都可以转换为布尔类型
true | false |
---|---|
String类型任何非空字符串、空白字符串 | String类型空字符串 |
Number类型任何非0数字,包括无穷大 | Number类型数字0、NaN |
Object类型①任何对象,包括空的对象(表示这个对象创建了,但是里面没东西)②数组对象,包括空数组③正则表达式 | Object类型空对象(表示的是没有创建,就是一个null) |
Undefined类型只能返回false |
var a =12;
var b=Boolean(a);
console.log(a,typeof a,b,typeof b);
//12 number true boolean
var c =undefined;
var d=Boolean(c);
console.log(c,typeof c,d,typeof d);
//undefined undefined false boolean
其他数据类型转换为Number
Number()函数
如果转换的值是null,undefined,boolean,number:
转换前 | 转换后 |
---|---|
true | 1 |
false | 0 |
null | 0 |
undefined | NaN |
number | 如果是数字值,原样输出 |
如果转换的值是string:
转换前 | 转换后 |
---|---|
“123” | 如果仅包含数值,转换为对应的数 |
“234.1” | 解析为对应的小数 |
“+12.1” | 首位为符号位,其余为数值,转换为对应的数值 |
“1+2.3” | NaN(符号位出现在其他位置,不在首位) |
“0xa” | 10 如果仅包含十六进制格式,转换为对应的十进制的值 |
“010” | 不会当作八进制来被解析,结果为10 |
“” | 0 |
“123ac” | 包含其他字符 NaN |
“12” | 12 |
var a='hello';
var b=Number(a);
console.log(a,typeof a,b,typeof b);//hello string NaN number
var c =undefined;
var d=Number(c);
console.log(c,typeof c,d,typeof d);//undefined undefined NaN number
parseInt()函数
如果转换的值是null,undefined,boolean,均转换为NaN
如果转换的值是Number:
①如果是整数值,原样输出
②如果是小数,例如10.3,舍去小数点一级后面的内容,输出10
如果转换的值是string(此处仅列出与Number()函数不同的):
转换前 | 转换后 |
---|---|
“234.1” | 234 小数点后面的数值省略 |
“+12.1” | 12 首位为符号位,其余为数值,转换为对应的整数 |
“1+2.3” | 1符号位出现在其他位置,保留符号位前面的数值 |
“” | NaN |
“123ac” | 123 |
var e ="0xa";
var f=parseInt(e);
console.log(e,typeof e,f,typeof f);
//0xa string 10 number
parseFloat()函数
如果转换的值是null,undefined,boolean,均转换为NaN
如果转换的值是Number:
①如果是整数值,原样输出
②如果是小数,如10.1,保留小数点输出,但是如果是10.0输出为10
如果转换的值是string(此处仅列出与Number()函数不同的):
转换前 | 转换后 |
---|---|
“234.1” | 234.1 保留小数点后面的数值 |
“+12.1” | 12 首位为符号位,其余为数值,转换为整数 |
“1+2.3” | 1 符号位出现在其他位置,保留符号位前的数值 |
“0xa” | 0 不会当做十六进制来解析 |
“010” | 不会当作八进制来被解析,结果为10 |
“” | NaN |
“123ac” | 123 |
var e =10.1;
var f=parseFloat(e);
console.log(e,typeof e,f,typeof f);
//10.1 number 10.1 number
特别注意
m+n
当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算
true + false; //1;Number(true)+Number(false);
true + 1; //2;Number(true) + 1
null + undefined; //NaN;Number(undefined) -> NaN
当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼接
"1" + true; // 1true
"1" + undefined; // 1undefined
"1" + 1; // 11
当m,n 有一个为对象,如果该对象既重写toString,又重写了valueOf方法,先调用valueOf方法获取返回值,将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用toString方法获取返回值,将该返回值和另外一个操作数进行运算
var o = {name:"briup",valueOf:function(){return "1";}}
o+1; //2;1+1
默认情况下,ECMAScript会将小数点后带有6个零以上的浮点数转化为科学计数法
0.0000003 => 3e-7
在进行算术计算时,所有以八进制十六进制表示的数值都会被转换成十进制数值。
保存浮点数需要的内存是整数的两倍,因此ECMAScript会不失时机将浮点转换为整数
var a = 1.;
var b = 1.0; //都将解析为1
避免测试某个特点的浮点数值,是使用IEEE754数值的浮点计算的通病
0.1+0.2 //结果不是0.3,而是0.30000000000000004