发表于: 2019-11-11 23:26:43
0 1104
今日完成的事
今天复习了js基础知识,
变量提升
在浏览器执行第一行代码之前会进行变量提升和函数定义,变量提升只会发生在当前作用域
浏览器在执行创建函数这一步时候会跳过,因为在开头函数就已经被定义了。
带var和不带var的区别,在全局作用域下声明一个变量相当于给window全局对象设置了一个属性,变量的值就是属性值(私有作用域下的私有变量和window没有关系),全局变量一改,window属性值也修改,window.a的值修改,变量a的值也改,全局变量和Window中的属性存在映射机制(一个改另一个也跟着改),私有作用域,要是一个变量不带var会向上级作用域查找,不是继续向上查找,一直找到window,这种查找叫做作用域链,不带var的不是变量,是给window增添一个属性。If条件下 的条件提升,在当前作用域下,不管是否成立都要进行变量提升,带var的只是声明,带function的在老版本浏览器渲染机制下,声明加定义都处理,但是为了迎合ES6中的块级作用域,新版本浏览器对于函数(在条件判断中的函数),不管条件是否成立,都只是先声明,没有定义。If判断为true,进入if体后才会进行提升和定义
关于重名的处理,如果名字重复了,不会重新声明,只会重新赋值,不管是执行的时候还是提升的时候
Es6基于let或者constant创建的变量或者函数不存在变量提升并且切断了全局变量与window属性的映射机制
上级作用域查找
当前函数执行,形成一个私有作用域A,A的上级作用域是谁和在哪执行没有关系,和他在哪创建有关系,在哪创建的他的上级作用域就是谁。
null和undefined
null:空,没有
undefined:未定义
空字符串与null的区别,空字符串开辟了内存,消耗了一点性能,null一点没有。
Null与undefined区别,null一般指现在没有,以后可能有也可能没有,但是预期想有。一般都是手动赋值为null,后期在赋值。Undefined是完全没在预料之内的。
引用数据类型
对象objet
每一个对象都是由0到多组属性名(key)与属性值(value)组成的,每一组属性名与属性值用逗号分隔。
属性,描述对象的特点和特征。
如何获取属性名对应的属性值
Var obj ={name:”珠峰”,age:8};
Obj.name 对象名.属性名 点忽略了属性名的单双引号
Obj[“name”] 对象名【“属性名”】这个格式不能忽略单双引号
对象的属性名都是字符串或者数字,属性值可以是任何格式。
如果属性名是个数字,第一种方式不好使了必须得用中括号的形式。但是数字加不加双引号无所谓了。一个对象的属性名是不能重复的,具有唯一性。
删除属性名。
假删除设置属性值为null,
Obj.属性名=null,让其属性值为null,但是属性还在对象中。
真删除
delete obj.属性名;
基本数据类型与引用数据类型的区别
JS是运行在浏览器中的,浏览器会为JS代码提供执行的环境,这个环境叫全局作用域,前端用window表示
函数数据类型
函数数据类型也是按照引用地址来操作的, 当我们创建一个函数时有一些参数我们并不清楚,只有当函数运行的时候,别人传递给我们才知道,此时我们需要设定入口,让用户执行的时候通过入口把值输入。
加了小括号代表函数执行的值,不加小括号代表函数本身
函数执行的过程,没有return返回值是undefined
1. 形成一个私有的作用域
2. 形参赋值(私有变量)
3. 变量提升(私有变量)
4. 代码执行
5. 栈内存释放或者不释放
判断语句
语法
If(条件1){
条件一成立执行操作
}else if(条件二){
上面条件不成立,条件2成立,执行操作
}
else{
以上条件都不成立执行操作
}
如果好几个条件都成立了,只把第一个成立的条件执行,后面成立的条件忽略不管。
条件的写法:
If(a){
执行操作
}
先把a转化为布尔类型,判断真假决定条件是否成立。
If语句不能用break和continue
三元运算符
条件?条件成立执行:条件不成立执行;
三元运算符不能省略
条件?条件成立执行:;这样会报错
可以用null站位
条件?条件成立执行:null;
三元运算符如果条件成立或者不成立的某种情况并不需要做什么处理,如果语法为空不符合可以使用null,undefined,void占位即可。
如果某一种情况执行多个操作,使用小括号包起来,中间用逗号分隔。
条件?(条件成立执行1,条件成立执行2):null;
比如
num >5 && num<=10?(num++,console.log(num)):null;
在三元运算符的操作中不能出现break,continue,return
Switch case循环
Switch case应用于if.else中一个变量在不同情况下的不同操作
语法 switch(存放的是一个值,一般写成变量或者计算){
Case 值:
…….
Break
Case 值:
…….
Break
default
….
Break
}
Case后面放入的都是值,目的是验证switch后面的值和哪一种case后面的值相等,相等的进行相应的处理
Switch小技巧把符合某几项值都去做同一件事,使用不加break实现
比如
Switch(num%3){
Case 0:
Case 1:
Num—
break
}
这样余数是0或者1都能执行
Switch的case中使用的比较是3个等于号,也就是绝对相等
循环语句
循环:重复做一件事
循环语句for
语法for(起始值;执行条件;更新表达式){
循环体:重复做的事情
}
初始值与执行条件和更新表达式之间用分号隔开
没有更新表达式就会出现死循环,出现死循环下面的代码都执行不了。
break
break可以退出整个循环语句,但是不包括if。if里不能用 break 和 continue,否则会报错)。break会立即终止离它最近的那个循环语句可以为循环语句创建一个label,来标识当前的循环(格式:label:循环语句)。使用break语句时,可以在break后跟着一个label,这样break将会结束指定的循环,而不是最近的。
for (var i = 0; i < 5; i++) {
console.log('i的值:' + i);
if (i == 2) {
break; // 注意,虽然在 if 里 使用了 break,但这里的 break 是服务于外面的 for 循环。
}
}
这里的break是终止的离他最近的那个循环。
label的使用
outer:
for (var i = 0; i < 5; i++) {
console.log("外层循环 i 的值:" + i)
for (var j = 0; j < 5; j++) {
break outer; // 直接跳出outer所在的外层循环(这个outer是我自定义的label)
console.log("内层循环 j 的值:" + j);
}
}
这里的break终止的是i=0的那个循环。
continue
continue语句的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。
在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。在for循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“更新表达式”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。再循环体内,不论continue是作为何种语句中的成分,都将按上述功能执行,同样,continue默认只会离他最近的循环起作用。
明天计划的事
整理任务6-10知识点
遇到的困难
对js基础知识还是不太熟悉
收获
对js基础更加巩固了
评论