day1 隐式转换 和 短路逻辑 和 三目运算符 和 赋值运算符
隐式转换:
+ "" 可以隐式转换为一个布尔值
-、*、/、% 可以隐式转换为数值类型,和Number的作用一样 undefined->NaN null->0
比较运算符可以隐式转布尔
除这几个以外,""、0、NaN、undefined、null 其他的转布尔都为true
短路逻辑
条件&&(操作) 当条件满足,则继续执行操作 常用于替代简单的 if语句
条件||(操作) 当条件不满足,则继续执行操作 常用于二选一
三目运算符
条件一?操作一:条件二?操作二:。。。。。:默认操作;
注意:三目运算符只能处理操作只有一句话的分支结构
赋值运算符
= += -+ *= /= ++ --
注意区分前++ 和 后++; --也一样
单独使用时,作用一样,都是变量自增自减1
和其他任何一起使用时,++i会用自增后的参与运算,而i++则用原值参与运算,然后再自增
day2 函数作用域 和 return 和 声明提前 和 switch分支语句
函数作用域:
局部变量和局部函数只能再函数作用域中使用
局部可以使用全局的,但全局不能使用局部的(可以用return解决)
不要再函数作用域中不加 var 创建变量,会造成全局污染(全局中没有这个变量则会再全局中创建) 全局修改(全局中有该变量,会修改原变量的值)
全局作用域:
全局变量和全局函数可以在页面的任何位置使用
return 函数向全局返回一个数据,但是只负责返回负责封装,需要用一个变量来保存这个return值
retrun a;
var result = fun();
声明提前:
var声明的变量 和 function声明的函数 会被提前到当前作用域的顶部,但是赋值留在当前位置
switch分支语句
switch(变量/表达式){
case 值1:
break;
case 值2:
break;
case 值3:
break;
....
default:
默认操作;
break;
}
day3 hash数组 和 数组的API
hash数组: 可以自定义下标的数组 创建hash数组的语法 var arr = []; arr["自定义索引"] = 元素值;
for in是专门用来遍历hash数组的方法 for(var i in 数组名){操作};
hash数组的原理
hash算法:我们自定义的索引会被解析为一个尽量不重复的数字地址值,用来保存后面的元素;同样的字符串会被解析为同样的数字地址
新建元素:自定义索引被解析出来的数字地址保存着后面的元素
读取元素:同样的数字地址值指向的元素是同一个
除了undefined和null,万物皆对象,因此我们想要遍历对象也可以用 for in方法 或者用 hash地址值去获取某一个 属性的属性值 对象名[属性名]
数组的API
arr.join("自定义连接符")方法
本质用法为自定义连接符 常用于页面渲染 标签
"<option>" + arr.join("</option><option>") + "</option>" 为将数组的元素用 option 标签渲染包装后
arr.concat(添加的新元素)
向数组最后添加新元素,但是不会改变元素组,而是返回一个包含新元素和旧元素的新的复制数组
如果添加的是数组,会自动拆开这个数组放到复制数组中
arr.slice(开始下标,结束下标); 获取数组中的某段元素,不改变原数组,将获取到的元素 用一个数组装起来返回
截取开始下标(包含) 到 结束下表(不包含) 之间的元素
只写一个开始下表,表示开始到结束全都要
两个都不写表示 赋值 完整数组, 深拷贝 改变一个另一个也改变; 和浅拷贝对应
arr.splice(开始下标,删除的个数,添加进去的元素可以多个) 会改变原数组,且会返回删除掉的元素数组
插入的元素会将 开始下标原位置的 元素和后面的所有元素向后退
千万不要直接插入数组,没有concat的自动拆开数组功能
能识别字符,如果为负值 则从后往前数下标即可