运算符
+ - / % **
- 在加号 任意一侧 出现了字符串的时候 是字符串拼接
- % 是取余数
var a =7;a =a%2 console.log(a);
结果是1,即7除2的余数 - ** 平方
赋值运算
= += -= *= /= %= **=
var a = 7;a+=7
代表意思是 a=a+7 算数运算不存在分数
<body>
<div id="box">
<p class="on"></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
</div>
</body>
<script>
var op = document.getElementsByTagName("p");
var index = 0;
document.onclick = function () {
op[index].className = "";
index++;
<!--if(index>op.length-1){-->
<!-- index = 0;-->
<!--}-->
index = index%op.length;//取余数 代替了if判断
op[index].className = "on";
}
</script>
1%5 = 1 ; 上面代码为了实现点击后,p的背景颜色发生改变,用了判断
比较运算
> < == != >= <= === !==
var a =10; b="6"; console.log(a>b);
结果是true,
-
< == 数值和“数字”做比较 有一个类型转换
var a ="10"; b="6"; console.log(a>b);
结果是false;如果说 字符串做比较 按照ASCII码表顺序挨个作对比
逻辑运算符
&& 且 || 或 ! 非
两侧都是布尔值的情况
- && 两侧都是true 返回true
- // 两边都是假 返回假 其他情况返回真
var a =1>2||3>2&&2>1;
console.log(a);//结果是true
- && 运算顺序优先级高于||
两侧不是布尔值
- && 遇到假就停止 并返回当前值 到头之后返回最后一个值
- || 遇到真就停止并返回当前值 到头之后返回最后一个值
- ! 取到的是布尔值
- 我们在控制流程的时候 通常会用到 逻辑运算的短路特性
var a = 5&&0&&6;
console.log(a);
结果是0,因为0是假
var a=5&&document.getelementsbytagname("p")&&6;
console.log(a);
结果是6,document.getelementsbytagname("p")虽然没找到 但是返回值是一个空的类数组 是真的
var a=5&&document.getelementbyid("box")&&6;
console.log(a);
结果是是null document.getelementbyid("box")返回值是null
var b=0||4||5;
console.log(b);
结果是0
var b=1||2&&5;
console.log(b);
结果是1,先运算 && 结果是5,再||结果是1
var b=""||2&&0;
console.log(b);
结果是0,先&& 结果是0,再||,都是假 为0
var c="hahah";
c!=c
console.log(c);
结果是false
var n=6;
3>n&&fn();
function fn(){
console.log(123);
}
函数不会执行,
显示类型转换 平时只做字符串---数值转换
- number(); 不会改变原有数据类型 而是把转换之后的结果 返回出来
<script>
var a ="123";
var b = number(a);
console.log(a);
console.lod(b);
</script>
第一个结果是“123” 第二个是123
var a="123b";
var b=number(a);
console.log(b);
console.log(typeof b);
第一个结果是NaN,另一个是number
- 数值 并不是所有类型的数据就是数 还有一个不是数 是NaN
console.log(NaN===NaN);
结果是false
var a =NaN;
console.log(a===a);
结果是false,即便是它自己也不等于自己
var a=true;
var b=number(a);
console.log(b);
结果是1 通电断电 1 0 高级语言:机器不能直接看懂 false会变成0
var a=[];
var b=number(a);
console.log(b);
结果是0 空数组被解释为0 如果按照数学逻辑是正确的数 那么会转换成数 数组中有多个值 被解释为nan
var a=["123"];
var b=Number(a);
console.log(b);
结果是123
var a=["123" ,"1345"];
var b=Number(a);
console.log(b);
结果是NaN
var a=null;
var b=Number(a);
console.log(b);
结果是0
其他显示类型转换
- String();和alert()表现一致 所有数据类型都能转变成字符串
- Boolean();
var a="";
var b=!!a;//var b =boolean(a);效果一样
console.log(b);
结果是false 如何判断数据类型为NaN
var a =123;
console.log(isNaN(a));
- isNaN 返回布尔值, true 就是NaN
parseInt parseFloat 用于把宽高带px解释为数字 toFixed(2) 保留几位小数 会四舍五入
parseInt 分析 整数 ;parseFloat小数数
强制类型转换 会从空格之后开始 左往右进行解释 直到遇到不符合数学逻辑的字符为止 解释为字符串,如果空格在中间会被认为是字符串
var a ="00100";
console.log(parseInt(a));
结果是100
var a ="00.100";
console.log(parseInt(a));
结果是0
var a ="100px";
console.log(parseInt(a));
结果是100
var a ="100px";
console.log(number(a));
console.log(parseInt(a));
第一个结果是NaN,第二个结果是100
var a ="4/8";
console.log(parseInt(a));
结果是4 遇到/会停止
var a ="- 4/8";
console.log(parseInt(a));
结果是NaN -是啥?不是数
var a =2.2222221355666;
console.log(a);
结果不会全部打印出来,小数被转换成二进制之后 可能无限循环 损失精度 不要用小数做判断
var a ="[]";
console.log(parseInt(a));
结果是nan parseInt会把空数组解释为NaN
var a ="["123"]";
console.log(parseInt(a));
结果是123
var a ="["123","12355"]";
console.log(parseInt(a));
结果是123 数组中有多个值 只解释第一个值
var a =2.2222221355666;
console.log(a.tofixed(2);代表取小数点后两位 **数值类型变为字符串,会四舍五入**
隐式类型转换
- 其他类型转字符串 +”“
var a =null;
a = a+"";
console.log(a);
结果是null
- 其他类型转数值 用*1 /1 null是0 undefined是nan
var a ="123";
a = a*1;
console.log(a);
var a =undefined;
a = a/1;
console.log(a);
结果是NaN
- 其他类型转布尔 !!
var a="";
var b=!!a;//var b =boolean(a);效果一样
console.log(b);
var a =undefined;
a = a++;//a=a+1;
console.log(a);
结果是NaN
- a++ 和 a=a+1不一样 a++会有类型转化
var a ="123";
a = a++;//a=a+1;
console.log(a);
第一种情况是124 第二种是1231