二阶段 二周

123 阅读4分钟

1、数据类型转换 强制类型转换: 1、转字符串:xx.toString();//xx不能undefined和null String(xx);//万能,相当于隐式转换,还不如+""

2、转数字:parseInt/Float/Number();

3、转布尔:Boolean(x);
	只有6个为false0"",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("切割符");