parseInt可以转换parseInt("-280px"),结果是-280。 这个函数返回字符串前面的数字,忽略尾部的非数字部分。 parseInt("11eleven")结果是11 parseInt("eleven")结果是NaN parseInt("-11eleven")结果是-11
Number是严格的,不允许任何非空格的字符。 Number("-280px")结果是NaN Number("-280")结果是280 什么是运算符:程序模拟人类运算的特殊符号 算术运算符:+ - * / % ++ -- + 可以表示加法,也可以用于字符串的连接 - 可以表示减号,也可以表示负号(任意类型数据做减号,都会被转为数字类型;如果有参数,不能自动转为数字,则返回NaN) 除法运算:如果除数为0:Infinity(无穷大) console.log(5/0); //Infinity console.log(0/0); //NaN console.log(type0f(5/0); //number type0f(x):判断任意数据的类型 %:取余数,也叫模运算,取得是除不尽的余数。限制一个数不能超过某个最大范围时,就可以用模运算。 递增/递减运算: ++: i++ ==> i=i+1;只要遇到对变量+1,就用i++ i++单独用:++放前放后,效果一样:i++ ==> ++i i++出现在表达式内部:前++是先+1,再参与表达式;后++,先用旧值参与表达式,表达式之后再+1 关系运算:> 什么是关系运算:判断关系大小!一般在条件判断中使用。 结果只有两个:成立:true;不成立:false 注意:关系运算自带隐式类型转换 字符串参与关系运算:从第一个字符开始,依次取出每个字符,PK Unicode编号 在关系运算中:任何类型(包括字符串)和数字比较,都转为数字,再比较;布尔类型参与关系运算,始终转为数字比较。 在关系运算中,等于要用==,不能用= console.log(3>10); //false console.log('3'>'10'); //true console.log('3'>10); //false console.log('10'==10); //true console.log('2'>true); //true console.log(2>true); //true 在关系运算中:先将参与判断的数据,强转为相同类型,再比较。 undefined类型,是从null类型继承来的。但是undefined值在比较时会被自动转为null。即undefined做==比较时:即:undefined==null ==>true ===严格相等:不带自动类型转换的相等比较!既会比较类型,也会比较值,只要任何一个不相等都会返回false。 只要不确定比较的类型,又不希望自动类型转换时,就用=== console.log(undefined==null); //true console.log(typeof(undefined)); //undefined console.log(typeof(null)); //object console.log(undefined===null); //false NaN做等值比较==:NaN和任何数字作比较,永远返回false,即使和自己比较也返回false,即 NaN==NaN ==>false isNaN(x):专门用来判断一个数据是否是NaN。如果是NaN返回true;如果不是NaN返回false。是数字返回false,如果不是数字返回true。只要不能自动转换为数字的,都返回true;只要能自动转为数字的,都返回false console.log(isNaN("")); //false 注:关系运算中"",可以自动转为0 console.log(isNaN(22.5)); //false console.log(isNaN("10")); //false 注:关系运算中,"10"可以自动转为10 console.log(isNaN("12px")); //true console.log(isNaN(true)); //false console.log(isNaN("true")); //true 注:关系运算中,true可以自动转为1,"true"不可以.字符串是不能自动转换为true的,但是布尔类型可以自动转换为数字 console.log(isNaN(NaN)); //true console.log(isNaN("NaN")); //true 注:上面这两个是有着本质区别的 关系运算总结: 1.普通数据,先转为相同类型,再比较 2.undefined,就用=== 3.NaN,就用isNaN(x) var temper=0; var weather="雨"; var money=45; var jacket=temper<-3; //false var umbrella=weather=="雨"; //true var taxi=money>=45; //true console.log(jacket+" "+umbrella+" "+taxi); //false true true console.log(jacket+umbrella"+taxi); //false true true 逻辑运算:基于多组关系运算,得出1个结论 &&:与运算,所有条件为true,才返回true;只有一个为false就返回false ||:或运算,只要任意一个为true,就返回true;只有所有条件都为false时,才返回false !:非运算,颠倒true和false,今后只要颠倒判断结果,就用! var c=prompt("请输入一个字符:"); var isNumber=c>="0"&&c<="9"; var isAlphabet=(c>="A"&&c<="Z")||(c>="a"&&c<="z"); var isChiense=c>="\u4E00"&&c<="\u9FA5"; //注意,以后只要是验证字符是不是汉字就用这个来验证 console.log(isNumber+","+isAlphabet+","+isChiense); var year=prompt("请输入年份:"); year=parseInt(year); var isLeapYear=(year%4==0&&year0!=0)||(year@0==0); //闰年的判断公式记下 console.log("是闰年吗"+isLeapYear); 关于“短路逻辑”的问题:只要前一个判断足以得出最终结论,则后续条件不执行! 例一: var i=10; var j=10; var k=i--<0&&j++>0; console.log("k="+k+","+"i="+i+","+"j="+j); //k=false,i=9,j=10 例二: var i=10; var j=10; var k=i-->0||j++>0; console.log("k="+k+","+"i="+i+","+"j="+j); //k=true,i=9,j=10 位运算:将数字以二进制形式进行计算 位移: 左移:n<<m ==>n*(2的m次方) 例3<<1 ==>3*(2的1次方) 3<<2 ==>3*(2的2次方) 3<<3 ==>3*(2的3次方) 右移:n>>m ==>n/(2的m次方) 例64>>1 ==>64/(2的1次方) 64>>2 ==>64/(2的2次方) 64>>3 ==>64/(2的3次方) 总结:左移几位就乘几个2,右移几位就除以几个2 赋值运算:=用于为变量赋值。赋值运算的结果就是等号右边表达式的结果。 var x=y=z=10; //赋值的结果就是右边表达式的值10,这种写法不推荐使用 扩展赋值表达式:(+= -= *= /= %=)一般是对已有数据计算同时,将结果再存回变量。一般在修改原变量值时使用。 += : i+=5;等效于i=i+5;同理其他几个 字符连接运算:+ 运算 三目运算:根据不同条件,动态返回不同结果!三目运算返回的结果是一个值。 为什么是三目:至少需要三个表达式。console.log(变量=="条件"?"执行1":"执行2"); 语法:条件?当条件满足时返回的值:当条件不满足时返回的值 例: var ts="人"; var bgj="妖"; var who=ts; console.log(who=="人" ?"放过":"杀掉"); 例2: var who=bgj; var r=who=="人"?"放过": who=="妖"?"杀掉": "送到泰国"; //上述条件不满足,则送到泰国 console.log(r); 三目运算中,多个条件时,即多选一,语法如下: 条件1?条件1满足时的值: 条件2?条件2满足时的值: 条件n?条件n满足时的值: 默认值; 三目运算应用: 需求1:2个数中取最大的 var score1=100; var score2=80; var result=score1>score2?score1:score2; 注意:后一个条件中不用包含否定前一个条件的关系判断。因为,进入后一个条件隐含的条件就是前一个条件不满足。 例: var salary=parseInt(prompt("请输入工资")); var c= salary>=20000?"土豪": salary>=8000?"小资": "屌丝"; console.log(c);