js规范
- 缩进一个tab = 4个空格
- + * 左右都要有一个空格
- 每一条语句后面都要跟一个;分号
查看js错误
1.firefox firebug
2.google google控制台
字符串类型和其他类型相加,自动转换成字符串类型,所做的就是字符串拼接
1.与
NaN(not a number)进行算数运算,结果依旧是
NaN,包括
NaN和
NaN进行运算也是
nun自己
var num=1-"2a"; 结果"2a"转换成数字
NaN,
NaN减去
NaN也是
NaN,
2.纯数字的字符串将转换成数字与数字进行相加
var num= 1+ "1"; 结果是转换成了数字2,
3.任何其他数据类型除了和字符串,和数字进行运算,会自动转换成数字再进行运算,
true = 1; false = 0; null = 0; undefined = NaN; var num = 1 + true;//结果数字2.
强制数据转换
var tmp = boolean(-1); 结果为
true,0为
false
var tmp = boolean(""); 结果为
false,有字符串为
true,
null和
undefined为
false,
Numer():
Number(true); 为1,
false为0,
"20a"结果为
NaN,
null为0,
undefined为
NaN,
ParseInt(),取整,类型为
Number,兼容
Number功能,
ParseInt("20a"); 结果为20,
ParseFloat();浮点数,类型为
Number,
var num = 1 / 0; 结果为
infinty,无穷大,
var num = -1 / 0; 结果为
-infinty,无穷小
1,一元运算符
只能操作一个值得运算符,
a++,
++a,
a--,
--a
2,关系运算符
如果都是数值,比较大小,如果都是字符串,则比较
ASCII字符编码值
alert("abc">"abd"); 从第一个一个一个比较,cfalse。
两个操作数如果有一个是数值,则将另一个转换成数值进行比较,
alert(2 > true);
true为1,
一个操作数
NaN,
alert(1 == NaN); 返回
false,!=返回
true,
NaN自身不相等,
alert(NaN != NaN); ,则返回
true.
全等===,全不等!==,
alert(20 === "20"); 返回
false,数据类型不同,
alert(20 == "20"); 返回
true,转换成数值后相比较
3,逻辑运算符
1.与&&,左右都为真,才为真,如果第一个判定为假,则不进行第二个表达式判断,返回假(短路操作),
2.或||,左右有一个真,返回真,左右都为假,才返回假(断路操作),如果第一个表达式为真,则不进行第二个表达式的判断,返回真,
3.非!,将任何值先进行布尔运算,取反,
alert(!infinity); 返回false,
alert(!NaN); 返回
true,
位运算:
应用层开发(面向对象语言),
object+c->c语言->汇编->二进制(机器码)
多个逻辑运算符的时候,先运算
&&后运算
||,
year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
二进制转换
1:十进制转换成二进制,除2取余,余数倒序排列得到结果,
2:二进制转换成十进制,
110100 1*2^2+1*2^4+1*2^5=52,从右向左依次0开始,遇到1则算2的几次方相加,
3:十进制转八进制/十六进制,先将十进制转换成二进制,再将二进制转换成八进制/十六进制。
二进制转八进制,从右向左,每三个分为一组,不足三位的用0补足,每组转换成十进制,
110 011->63
八进制转十进制,63,
3*8^0+6*8^1=51,
二进制转十六进制,从右向左,每四个分为一组,不足四位的用0补足,每组转换成十进制,0011
0011->33
十六进制转十进制,33,
3*16^0+3*16^1=51,
三目运算符/条件运算符
表达式:表达式1 ?表达式2 :表达式3;
如果表达式1为非0(真),则求解表达式2,如果表达式1为0(假),则求解表达式3,
var num1 = 20; var num2 = 10; alert(num1 > num2 ? num1 : num2 );//判断num1是否大于num2,如果条件成立,这返回第一个num1,如果条件不成立,则返回num2
break与
continue再循环语句中的应用,
break跳出循环,
continue则跳过下面的运算继续下一次循环。
函数:
当他被调用时可执行的重复使用的代码块
var show = function(){}; 因为右边没有函数名称,一般称为匿名函数
function 函数名(){函数体;},
aguments内置的数组
function sum(){alert(aguments[0])};
sum(3,4,5); 输出3,
函数如果没有返回值,则不能赋值,需要
return一个值。
return一般放在最后,执行到
return后结束,后面的语句不执行
var num = parseInt("20a") ;//num等于20; alert(typeof num);//返回num的数据类型number;
判断闰年
function leapyear(a){ if(a % 4 == 0 && a % 100 != 0 || a % 400 == 0 )//条件不能被100整除,并且能被4整除,异或可以被400整除 {return true;} else{return false;} } alert(leapyear(2000));
判断是否是素数
function prime(num){ var isyes = true; for(i = 2; i){ if(num % i == 0){//如果被小于任何自己的数且这个数大于等于2的数整除 return num +"不是素数"+!isyes;//返回不是素数 break; } } return num +"是素数"+isyes; } alert(prime(8));
递归函数
函数可以自己调用自己,称为递归,特点:必须有参数,必须要
return,
工作当中不会使用递归函数,短时间内会导致内存剧增
function sum(n){ if(n == 1){ return 1; } return sum(n - 1) + n; } alert(sum(50));
斐波拉契函数
一开始有一对兔子,到四月的时候,兔子会出生一对新的兔子
1mon 2mon 3mon 4mon
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1
1 1 0 1
4月的总数 = 上个月的三月份兔子 + 这个月新出生的兔子,这个循环同样试用与99月100月
rabbit(4)sum = rabbit(3) + rabbit(1)
function rabbit(month){ if(month < 4){ return 1; } return rabbit(month -3) + rabbit(month - 1);//增加的兔子加上上个月的总数兔子递归,就是这个月的总数兔子, } rabbit(10);