- 运算符
1、JS基础----算数运算符
取余%
取余的结果的正负值只和被除数的正负号有关,和除数的政府没有关系
一般尽量避免给小数求余,因为js编译器的精确度没有其他编译器那么精密
自增>前自增 ++a > 后自增 a++(自减同理)
变量a的前自增,变量本身先自增,然后再将结果赋予到当前位置;
变量a的后自增,变量的值先赋予当前位置,然后变量自身在进行自增
//例:
var a = 4, b = 3;
var c = (a++ + ++b + b-- + --a)%5;
console.log(a);//a = 4
console.log(b);//b = 3
console.log(c);//c = 1
加号的另一种用法,如果加号的两侧,有一个是字符串,则结果是字符串的拼接
var a = 1;
console.log("a的结果是"+a);
//a的结果是1
Math.round()四舍五入
var a = 9,b = 7;
var c = Math.round(a/b);
console.log(c)
//1
parseInt:将字符串转换成整数,对从字符串左侧一次查找数值,直到碰到非数值的字符结束
var a = '128';
var b = parseInt(a);
console.log(typeof b);
//number
parseFloat:会转遇到的第一个的小数点,如果第一个小数点在第一个位置,默认加一个0
浮点数:即就是带有小数点的数
例:
var a = ".125.24";
var b = parseFloat(a);
console.log(b);
//0.125
当结果返回NaN:not a number代表不能将这个转换成正常的数字类型,这个返回值是number类型
总结:parseInt和parseFloat的区别:
1)、parseInt和parseFloat会按照顺序一个个转字符串中的字符,直到碰到不能转为数字的字符为止,如果第一个字符就转不成数字,则输出NaN;
2)、parseInt认为小数点不能转,parseFloat会转遇到的第一个小数点;
3)、Number对整个字符串进行转换,根据有没有包含一个小数点来选择转换为整形还是浮点型,有任意字符不能转换时返回NaN
.toString(x);转换为x进制
.toFixed(x);保留到小数点后几位
- 赋值运算:+=、-=、*=、/=、%=
a-=b 即就是a = a-b;
其他的赋值运算符同理
- 关系运算符:返回值是布尔值>、<、>=、<=、!=
var a = 7,b = 6;
var c = a>b;
console.log(c);
//true
- ==和===
区别:
===:
1、如果类型不同,就不相等;
2、如果两个都是数值,并且是同一个值,那么相等;
3、如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等;
4、如果两个数都是true或者都是false,那么相等,否则不相等;
5、如果两个数都引用同一个对象或者函数,那么相等,否则不相等;
6、如果两个值都是null或者都是undefined,那么相等
==:
1、如果两个值类型相等,那么进行===比较
2、如果两个值类型不同,他们可能相等,根据下面规则进行类型转换再比较
a、如果一个是null,一个是undefined,那么相等;
null == undefined
null == false
undefined == false
b、如果一个是字符串,一个是数值,把字符串转化成数值再比较;
c、如果任一值是true,把它转化成1再比较,如果任一值是false,把它转化成0再比较;
d、任何其他组合都不想等
var a = 5,b = '5';
console.log(a==b);//true
console.log(a===b);//false
引用数据类型的判断,看两侧的变量是否为同一个对象,是则是true,不是则为false
var a = {},b = {};
console.log(a==b);//false
console.log(a===b);//false
var a = {},b = a;
console.log(a == b);//true
console.log(a === b);//true
逻辑运算符:&&、||、 !(与、或、非) false代表的数值就是0,其他的都是true
&&:只有全部的表达式都为真才返回true,否则返回false;
||:至少有一个是真则返回值是true,全部为假返回false;
!:表达式为真则返回false,表达式为假则返回true
var a = !6<7;//!6的优先级最高先执行这个结果为false,隐式转换为数值则是0,返回a就是true
alert(a);
//true
三目运算符:表达式1>表达式2?结果1:结果2
运算符的优先级
. [] ():字段访问、数组下标、函数调用以及表达式分组
++、--、!、delete、new、typeof
*、/、%
+、-、+ 加、减、字符串连接
关系运算符、instanceof(判断某个对象是否是某个类的一个实例)
逻辑运算符
赋值运算符
()作用:可以表达式分组、改变运算符的优先级、函数调用。
new运算符:用来创建对象。
- 强制转换
Number()强制返回数值类型
传进去的是布尔值,true返回为1,false返回为0;
传进去的是null返回0;
传进去是undefined返回NaN;
检测一个数字返回的是不是NaN不能用NaN == NaN来判断
只能用一个函数isNaN()来判断
将对象转换为数值的时候
当传进去的是一个对象(object)的时候,返回值是NaN,这个过程比较复杂,需要先调用valueOf:function(){},如果valueOf返回是一个基本数据类型时,Number会对其进行转整操作;如果返回值还是一个函数的时候,调用toString:function(){},如果这个函数还不能返回基本数据类型的时候,会报错!!!(两个方法的返回值相同)
var obj = {
valueOf:function(){
return{};
}
toString:function(){
return{};
}
};
document.write(Number(obj));
string函数:将数据类型转换为字符串类型
alert(String(123));//'123'
alert(String(true));//'true'
alert(String(null));//'null'
alert(String(undefined));//'undefined'
var obj = {
valueOf:function(){
return{};
}
toString:function(){
return{};
}
};
document.write(Number(obj));
将对象转换为字符串类型当传进去的是一个对象(object)的时候,返回值是NaN,这个过程比较复杂,需要先调用
toString:function(){},如果
toString
:function(){},返回是一个基本数据类型时,Number会对其进行转整操作;如果返回值还是一个函数的时候,调用valueOf:function(){},如果这个函数还不能返回基本数据类型的时候,会报错!!!
解决方案就是将返回值直接改为基本的数据类型
var obj = {
toString:function(){
return{};
}
valueOf:function(){
return{};
}
};
document.write(Number(obj));
参数为原始类型值转化为布尔类型
转换规则相对简单:除了以下六个值的转换结果为false,其他的值全部为true。
undefined、null、-0、0或+0、NaN、''(空字符串)
所有对象的转换结果都为true
- 自动转换(隐式转换)
1、数字+字符串
var num = 1;
console.log(typeof("这个数字是"+1));//string//把数字1先转换为字符串,然后,再进行拼接。
结果是字符串类型
2、数字-字符串
var num = 75;
num = num-"2";//数字和字符串做减法,那么,字符串会转换成数字,
alert(num);//number
- 进制的转换:二进制、八进制、十进制、十六进制
二进制:只有0和1
八进制:0打头,0-7
十进制:0-9的数字
十六进制(在编程语言中,十六进制以0x打头):逢十六进一;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;
parseInt(a,n)//第二个值表示指定第一个值是几进制的,最后结果都是10进制的
在js中输入一个八进制的数字时,会自动转换为十进制
如:alert(012);
把十进制转换为八进制;
var age = 25;
//alert(age.toString(8));
var str = age.toString(8);//把数字age转换为8进制数的字符串形式;
alert(typeof str);