1、数据类型转换 强制类型转换: 1、转字符串:xx.toString();//xx不能undefined和null String(xx);//万能,相当于隐式转换,还不如+""
2、转数字:parseInt/Float/Number();
3、转布尔:Boolean(x);
只有6个为false:0,"",undefined,null,NaN,false
分支和循环的条件中都会悄悄的带有转为布尔的隐式转换
2、运算符和表达式 1、算术:+ - * / % 隐式转换:默认数字,在运算 特殊:1、+运算,碰上字符串,则拼接 2、-*/% 碰上纯数字组成的字符串也可以转为数字,但非纯数字字符串则为NaN NaN参与任何算术运算结果都为NaN
2、比较:> < >= <= == != === !==
隐式转换:默认数字,在比较
特殊:1、两边都字符串,按位PK每个字符unicode号(ascii号)
2、NaN参与比较,都为false,推荐:!isNaN(x)
3、undefined===null
3、逻辑运算:
本来的功能是做一个综合比较
特殊:短路逻辑
&&:简化简单的分支if(){}
条件&&(操作);
||:两个值二选一 - 处理兼容性问题
e=e||window.event;
4、位运算:
左移:m<<n,m*2的n次方
右移:m>>n,m/2的n次方
缺点:底数只能是2
5、赋值运算:+= -= *= /= %= ++ --
特殊:前++和后++
单独使用,放前放后无所谓
如果参与别的表达式:
变量中的值都会+1
前++,返回的+1之后的新值
后++,返回的+1之前的旧值
6、三目运算:简化简单的分支if(){}else{} if(){}else if(){}else{}
条件?操作1:默认操作; == if(){}else{}
条件1?操作1:条件2?操作2:默认操作; == if(){}else if(){}else{}
特殊:1、默认操作不能省略
2、简单的 - 操作只能有一句话
1、自定义函数: 1、创建函数的方式: 1、声明方式: function 函数名(形参列表){ 函数体; return 返回值; }
2、直接量方式:
var 函数名=function(形参列表){
函数体;
return 返回值;
}
2、调用函数:var 结果=函数名(实参列表);
3、作用域:
全局:成员,在任何地方都可以使用
函数:成员,只能在函数调用时内部可用
变量的使用规则:优先使用局部的,局部没有找全局,全局没有就报错,尽量不要全局污染,可以修改全局
4、声明提前:
在程序正式执行之前
会将var声明的变量(轻)和function声明的函数(重)
集中提前到当前作用域的顶部
但是赋值留在原地
5、按值传递:
如果传递的是原始类型的值,复制了一个副本给对方,两者互不影响
如果传递的是引用类型的对象,使用的同一个地址值。相互影响 - 浅拷贝
2、预定义全局函数: parseInt/Float/isNaN/eval...
3、分支结构: switch(变量/表达式){ case 值1: 操作; break; case 值2: 操作; break; default: - 可以省略不写 默认操作; }
1、循环: var 循环变量=几 do{ 循环体; 变量的变化 }while(条件) do...while至少会执行一次
退出循环:推出本次循环:continue;
2、数组基础: 关联数组 - hash数组: 创建:2步 1、先创建空数组:var arr=[]; 2、添加自定义下标以及值: arr["自定义下标"]=新值;
访问:arr["自定义下标"]
遍历:length失效了,不能用for循环,使用 for in
for(var i in arr){
arr[i];//当前次元素
}
3、数组的API:只有数组可以使用的函数 1、数组转为字符串:var str=arr.join("自定义连接符"); 1、无缝拼接:var str=arr.join(""); 2、拼接为页面元素:var str="<开始>"+arr.join("</结束><开始>")+"</结束>";
2、拼接数组:添加元素的新方式
var newArr=arr.concat(新值,arr5,...)
3、截取子数组:
var subArr=arr.slice(starti,endi+1);
4、删插替:var dels=arr.splice(starti,n,新值,...);
5、翻转数组:arr.reverse();
1、ArrayAPI: 1、排序: arr.sort(); - 按照字符出排序 arr.sort(function(a,b){return a-b;}) - 数字升序 arr.sort(function(a,b){return b-a;}) - 数字升序
2、栈和队列: 前进:arr.unshift(新值,...); 前出:var first=arr.shift();
后进:arr.push(新值,...);
后出:var last=arr.pop();
2维Array: 1、访问:列下标越界 - undefined 行下标越界 - 报错
2、遍历二维数组:两层循环
1、String API:只读:字符串所有的API都不会修改原字符串
1、转义字符:
作用:
1、解决和程序冲突的字符
"""
2、特殊功能:
\n换行
3、书写unicode编码
\uXXXX
2、大小写转换(验证码):var 保存=str.toUpper/LowerCase()
3、获取指定位置的字符:str.charAt(i) === str[i]
4、获取指定位置的字符的ascii码 var ascii=str.charCodeAt(i) 通过ascii码转会原文 var 原文=String.fromCharCode(ascii);
5、检索字符串:var i=str/arr.indexOf("关键字",starti); 没找到返回-1
6、截取字符串: var subStr=str.slice(starti,endi+1); .substring(starti,endi+1);//不支持负数参数 .substr(starti,截取个数);//不必考虑含头不含尾
7、拼接字符串:不如+运算
8、替换字符串:var newStr=str.replace("关键字","新内容");
9、切割字符串:作用:将字符串->数组 var arr=str.split("切割符");