JS中的判断操作语句
1.if/else if/else
只要有一个条件成立,后面不管是否存在成立的条件都不再判断执行了
【关于条件可以怎么写?】
不管你在条件判断中写什么,最后总要把其计算出TRUE/FALSE来判断条件是否成立。(把其他类型的值转化为布尔类型,只有0 NaN ‘’ null undefined五个是false,其余都是true)比如if(0)
'3px'/3;=>NaN 3px转成数字是NaN
'50'/5=>10
在js中,+ - * / % 都是数学运算符,除了+以为,其余运算符在运算的时候,如果遇到了非数字类型,首先会转化为数字类型(number),然后再进行运算。
'3px'+3='3px3'
在js中除了数学相加,还有字符串拼接作用(如果运算中遇到了字符串,则为字符串拼接而不是数学相加)
if('3px'+3)=>'3px3'true
if('3px'-3)=>NaN false
if(NaN>3)=> false
{}+'str'=>NaN
[]+'str'=>'str'
null+'str'=>'nullstr'
undefined+'str'=>'undefinedstr'
【注意】typeof a中数组和对象都输出object
a.toString()中【】转化为字符串,{}是【object object】
BAT面试题(易错)
‘3’
第一行结果是NaN, NaN和谁都不相等,NaN==NaN是错误的!typeof NaN是’number’,所以输出’3’ alert 的输出结果是字符串,所以说不是3!
typeof
在JS中用来检测数据类型的方式之一,除了它以外还有:
- instance of
- constructor
- Object.prototype.toString.call()
语法:typeof [value] =>检测value的数据类型
返回值:使用typeof检测出的结果是一个字符串,字符串包含着对应的数据类型,例
'number'/'string'/'boolen'/'undefined'/'object'/'function'
[特例]typeof null=>'object'确实属于基本类型值,但null代表空对象指针(没有指向任何的内存空间),可以理解为typeof的bug
typeof检测数/正则/对象,最后返回的都是'object',也就是基于这种方式无法细分对象
面试题
console.log(typeof []);=>'object'
console.log(typeof typeof []);=>'string'
2.三元运算符判断
语法:条件?成立做的事情:不成立做的事情;相当于简单的if/else
var num=12;
if(num>10){
num++;
}
else{
num--;
}
//改成三元运算符
num>10?num++:num--;
特殊情况
//=>如果三元运算符中某一部分不需要做任何处理,用null/undefined/void 0...占位即可。不可以不写,不写会报错
var num=12;
num>10?n++:null;
num>10?n++:void 0;
num>10?n++:undefined;
//=>如果需要执行多项任务操作,我们把其用小括号包裹起来,每条操作语句用逗号分隔
num=10;
num>=10?(num++,num*=10):null;
思考题:
3.switch case
- JS中的一种判断方式
- 应用于变量(或表达式)在不用值情况下的不同操作,每一种case结束后都要加break(结束整个判断)。
switch(num){
case 10:
num++;
break;
case 5:
num--;
break;
default:
num=0;
}
【小知识点】
n++和n=n+1一样吗?
在是数字时一样,字符串的时候不一样,所以最好用n++
var n='10';
n=n+1;
console.log(n);=>101 字符串拼接
var n='10';
n++;
cosnole.log(n);=>11 还是数学运算
【特殊性】
'10'===10;=>false 绝对比较,如果两边数据类型不一样,则直接不相等,它要求类型和值都完全一样才相等(真实项目中未来保证代码的严谨性,我们应该更多使用绝对比较)
'10'==10;=>true =>相等比较,如果等号左右两边的类型不一样,首先会转化为一样的数据类型,然后再进行比较
=>当前案例中,就是把字符串'10'转换为数字了,然后再比较的
switch case中每一种case情况的比较都是基于**’==='绝对相等**来完成的
【break】
不加break,不管后面的条件是否成立都被会执行,利用此机制,可以完成一些特殊的处理,例如num=5,num=10都要做同一件时间,那么我们写在一起,不用加break;
var num=5;
switch(num){
case 10:
case 5:
num--;
break;
default:
num=0;
}
console.log(num);=>4
for循环
var ary=[12,23,34];
//=>倒着输出每一项
for(var i=ary.length-1;i>=0;i--)
{
console.log(ary[i]);
}
//输出奇数项内容
for(var i=0;i<ary.length;i+=2)
{
console.log(ary[i]);
}