比较/关系运算符:> < >= <= == != === !==
返回的结果:布尔值:true、false
隐式转换:默认一切都转为数字,再比较大小
特殊:1、如果参与比较【两个都是字符串】,按位pk每个字符的十六进制unicode号(十进制ASCII码)
NaN,参与任何比较运算结果都为false,解决:!isNaN(x)
x是一个数字,结果true
x是一个NaN,结果就为false
undefined==null;
问题:null==undefined结果为true,区分不开undefined和null
解决:全等===:数值相同 并且 数据类型也要相同,换句话说,不再带有隐式转换
!==:不带隐式转换的不等比较
逻辑运算符:
&&:全部条件都为true,结果才为true
只要有一个为false,结果就为false
||:全部条件都为false,结果才为false
只要有一个为true,结果就为true
!:颠倒bool值
特殊:短路逻辑:只要前一个条件已经可以得出最终结论,则后续条件不会再执行
&&:如果前一个条件满足,则后一个操作才执行,如果前一个条件不满足,则后一个操作不执行
实现了一个【简单】的分支:目的:简化if(){},操作只能【用一句话】
语法:条件&&(操作);
举例:if(total>=500){total*=0.8}
total>=500&&(total*=0.8)
赋值运算:+= -= *= /= %= ++ --
一句话完成了两个操作,先运算再赋值回去
比如:i++ => i+=1 => i=i+1;
递增 vs 累加
递增:i++,每次只能加1
累加:i+=n,每次加几由我们自己决定
鄙视/笔试题:++i 和 i++ 的区别?
1、单独使用时,放前放后无所谓都一样
2、如果参与了别的表达式,变量中的值都会+1
前++,返回的是加了之后的新值
后++,返回的是加了之前的旧值
三目运算 - 简化if...else if...else if...else
如何使用:
1、条件?操作1:默认操作;
2、条件1?操作1:条件2?操作2:条件3?操作3:默认操作;
循环结构:反复执行 相同 或 相似的操作
do...while循环:
语法:var 循环变量=几;
do{
循环体;
变量变化;
}while(循环条件)
for(var 循环变量=几;循环条件;变量变化){
循环体;
}
数组的基础:一个变量可以保存多个数据
1、创建:2种
1、直接量:var arr=[值1,....];
2、构造函数:var arr=new Array(值1,....);//缺陷:面试中:new Array(3);设置一个长度为3的空数组
2、访问:
获取:arr[i]; - 特殊:下标越界:得到undefined
添加/替换:arr[i]=新值; - 特殊:下标越界:得到稀疏数组
3、*3大不限制:
不限制长度、类型、下标越界(不是好东西)
4、length的三个固定套路:
获取倒数第n个元素:arr[arr.length-n];
向末尾添加元素:arr[arr.length]=新值
缩容:arr.length-=n;
5、遍历数组:
for(var i=0;i<arr.length;i++){
arr[i];//当前次元素
}
数组 转为 字符串:
var str=arr.join("自定义连接符");
实现:二级联动:
1、必须使用二维数组,而且二维数组的数据顺序一定要和一级的对应上
2、select专属事件:select.onchange:状态改变事件:选中项发生改变才会触发
3、select具有一个属性:this.selectedIndex;获取选中项的下标 - 只有select不需要自定义下标
4、其实绑定事件的部分就是函数名,也可以拿来调用
拼接数组:添加元素到的末尾的新方式
var newArr=arr.concat(值1,arr1...);
特殊:
1、此方法不修改原数组,只会返回一个新数组
2、此方法传参支持数组参数,并且会悄悄的打散这个数组,单独传入
截取子数组:从starti位置截取到endi+1位置的元素,组成一个新数组
var subArr=arr.slice(starti,endi+1)
特殊:
1、此方法不修改原数组,只会返回一个新数组
2、含头不含尾
3、第二实参可以省略:从starti截到末尾
第一实参也可以省略:从头截到尾 - 昨天按值传递(浅拷贝)
深拷贝:复制了一个副本给对方
4、支持负数参数,-1代表倒数第一个
删除、插入、替换:
删除:var dels=arr.splice(starti,n);//从starti开始删除n个
特殊:此方法其实也有返回值,所有删除的元素组成的一个新数组
插入:arr.splice(starti,0,值1,...);//从starti开始删除0个,插入了新元素
特殊:原来starti位置的元素以及后续元素都会被向后移动
替换:var dels=arr.splice(starti,n,值1,...);
特殊:插入的个数和删除的个数可以随意
转换大小写:【统一的】转为大写或小写,再比较,忽略大小写:- 验证码
大写:var newStr=str.toUpperCase();
小写:var newStr=str.toLowerCase();
获取字符串中指定位置的字符的ascii码
var ascii=str.charCodeAt(i);
通过ascii码转回原文
var 原文=String.fromCharCode(ascii);
检索字符串:检查索引/下标:从starti位置开始找右侧的第一个关键字的下标
作用:判断有没有
var i=str/arr.indexOf("关键字",starti);
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);//截取的个数,不必考虑含头不含尾
替换字符串:今天不屌,需要有了正则表达式才会牛逼
var newStr=str.replace("关键字"/正则表达式,"新内容");
切割/分割字符串:作用:str <=> arr
var arr=str.split("自定义切割符");
特殊:
1、切割符可以自定义,切割过后返回一个数组,数组中不再包含切割符
2、如果传入的切割符是一个"",每一个字符都会被切开
扩展:创建元素并且渲染页面
1、创建空标签
var elem=document.createElement("标签名");
2、设置必要的属性或事件
elem.属性名="属性值";
elem.on事件名=function(){函数体} - 事件都可以在创建时提前绑定上
3、创建好的元素渲染到DOM树上
父元素.appendChild(elem);