一.数据类型的转换: 1、转字符串:xx.toString();//xx不能是undefined和null String(x);//万能,但是还不如+""
2、转数字:没有新东西
3、转bool:Boolean(x);//万能,还不如!!x
有6个会转为false:0,"",undefined,null,NaN,false,其余都是true
二、运算符和表达式 1、算术运算:最基础的运算
2、比较运算:> < >= <= == != === !==
特殊:默认都转为数字,再比较
1、两边都是字符串,按位PK每个字符串unicode
0-9 A-Z a-z 汉字
2、NaN:!isNaN(x) (判断是否为数字类型)
3、undefined===null(区别两者)
3、逻辑运算:
特殊:短路逻辑
&&:简化if
条件&&(操作);
||:两个值二选一 - 以后兼容
e=e||window.event;
4、位运算:
左移:m<<n,m*2的n次方
右移:m>>n,m/2的n次方
5、赋值运算:+= -= *= /= %= ++ -- i-- => i-=1 => i=i-1;
特殊点:
前-- 和 后--
单独使用,放前放后无所谓
如果参与了别的表达式:变量中的值都会-1
前--,返回的减了之后的新值
后--,返回的减了之前的旧值
++同理
6、三目运算:简化if...else 和 if...else if...else
条件?操作:默认操作;
条件1?操作1:条件2?操作2:默认操作;
特殊点:1、操作只能有一句话
2、默认操作不能省略的
扩展:1、舍入误差:parseFloat(num.toFixed(保留小数位数))(解决由系统造成的误差);
三、*****基本函数 1、创建函数&返回结果 1、创建:2种 1、声明方式:function 函数名(形参,...){ 函数体; return 结果; }
2、直接量方式:var 函数名=function(形参,...){
函数体;
return 结果;
}
2、调用&得到结果:
var result=函数名(实参,...);
2、作用域: 全局:成员 在任何地方都可以使用 函数:成员 只能在函数调用时内部可用 变量的使用规则:优先使用自己的,自己没有找全局,全局没有则报错 尽量的不要全局污染
3、声明提前:在程序执行之前,会悄悄的将var声明的变量和function声明的函数,集中提前到当前作用 域的顶部,但是赋值留在原地,变量比函数要轻一些
4、按值传递:(浅拷贝) 如果传递的是原始类型,两者互不影响,复制了一个副本给对方 如果传递的是引用类型,两者相互影响,两者使用的是同一个地址值
2、预定义全局函数: 编码:var code=encodeURIComponent("原文"); 解码:var 原文=decodeURIComponent(code);
isFinite(num):判断一个数字是不是有效范围,基本结果都为true,只有3个人会为false:分母为0、 NaN、Infinity
3、分支结构: switch(变量/表达式){ case 值1: 操作1; break; case 值2: 操作2; break default: 默认操作; }
1、循环: var 变量=几; do{ 循环体; 变量变化 }while(循环条件)
不管第一次满不满足,都会执行第一次 终止循环语句:continue - 退出当前次循环 四、数组的基础: 关联hash数组:下标是可以自定义的 创建:var arr=[]; arr["自定义下标"]=值; 访问:arr["自定义下标"] 特殊:遍历:for in循环 for(var i in arr){ i;//当前次的下标 arr[i];//当前次的元素 }
牢记点、*****数组的API: 1、数组转为字符串:var str=arr.join("自定义连接符"); 固定套路:1、无缝拼接 2、拼接页面上的元素
2、拼接数组:添加元素的新方式 var newArr=arr.concat(值1,arr2,...); 3、截取子数组:拿出某一部分 var subArr=arr.slice(starti,endi+1); 4、删除、插入、替换: var deletes=arr.splice(starti,n,值1,....); 5、翻转数组:arr.reverse(); 6、排序:arr.sort() 按数字排序:arr.sort(function(a,b){return a-b}) 降序排序:arr.sort(function(a,b){return b-a})
7、栈和队列: arr.unshift(值,...); var first=arr.shift(); arr.push(值,...); var last=arr.pop();
2、二维数组: 创建: var arr=[[],[],[],[]]
访问:arr[r][c];
特殊:列下标越界:undefined
行下标越界:报错
遍历:
for(var r=0;r<arr.length;r++){
for(var c=0;c<arr[r].length;c++){
arr[r][c];//当前次元素
}
}
*****String API: 【只读】字符数组:字符串的任何API都不会修改原字符串,保存新字符串 1、转字符串:\
1、字符串中如果出现了和字符串冲突的符号,可用\将其转义为原文
\" \'
2、特殊功能:
换行:\n
制表符:\t
3、*可以书写unicode号 表示一个字
\uXXXX
汉字的第一个字:4e00
汉字的最后一个字:9fa5
2、*转换大小写:【统一的】转为大写或小写,再比较,忽略大小写:- 验证码
大写:var newStr=str.toUpperCase();
小写:var newStr=str.toLowerCase();
3、获取字符串中指定位置的字符的ascii码
var ascii=str.charCodeAt(i);
通过ascii码转回原文
var 原文=String.fromCharCode(ascii);
4、*检索字符串:检查索引/下标:从starti位置开始找右侧的第一个关键字的下标
作用:判断有没有
var i=str/arr.indexOf("关键字",starti);
特殊:1、starti可以省略,如果省略则从0开始
2、返回值:找到了,返回第一个字符的下标
***其实我们根本不关心下标是几,只关心下标是不是-1,-1代表没找到,不是-1代表找到了
3、数组也可以使用此方法
4、鄙视题:找到所有关键字的位置(for循环可做)
var str="no zuo no die no can no bibi";
var i=-1;
while((i=str.indexOf("no",i+1))!=-1){
console.log("找到了:"+i);
}
5、拼接字符串:var newStr=str.concat(str1,str2...) 还不如 +运算
6、*截取字符串:3个
1、**var subStr=str/arr.slice(starti,endi+1);
2、var subStr=str.substring(starti,endi+1);//不支持负数参数
3、*var subStr=str.substr(starti,n);//截取的个数,不必考虑含头不含尾
7、*替换字符串:今天不屌,需要有了正则表达式才会牛逼
var newStr=str.replace("关键字"/正则表达式,"新内容");
8、*****切割/分割字符串:作用:str <=> arr
var arr=str.split("自定义切割符");
特殊:
1、切割符可以自定义,切割过后返回一个数组,数组中不再包含切割符
2、如果传入的切割符是一个"",每一个字符都会被切开
扩展:创建元素并且渲染页面(一切的结构和模式都是可以雷同,但渲染是我们自己的) 1、创建空标签 var elem=document.createElement("标签名");
2、设置必要的属性或事件
elem.属性名="属性值";
elem.on事件名=function(){函数体} - 事件都可以在创建时提前绑定上
3、创建好的元素渲染到DOM树上
父元素.appendChild(elem);