第二周总结

橙色 漏了

红色 错了

Day01

一、数据类型转换

1.1强制转换

  1. 转字符串

    var str=x.toString();//x不能是undefined和null
    var str=String(x);//万能,完全等于隐式转换,不如+""
    
  2. 转数字

    Number()
    parseInt/Float(str)
    
  3. 转布尔

    Boolean()
    6个为false:0 , "" , undefined , null , NaN , false
    

1.2隐式转换

二、运算符和表达式

2.1算数运算符

+-*/%

2.2比较运算符

<  >  <=  >=  ==  !=  ===  !==

结果:布尔值

隐式转换:默认,转为数字再比较大小

  1. 如果参与比较的左右两边都是字符串,则按位PK每个字符的ascii码

    0-9<A-Z<a-z<汉字,常识:汉字的第一个字是“一”:unicode号为4e00,ascii为19968;最后一个字 最后一个字:龥:unicode号:9fa5 - ascii:40869

  2. NaN参与任何比较为false

  3. undefined==null为true

  4. undefined===null为false

    全等:数值相同,数据类型相同,不再带有隐式转换

    !==不再带有隐式转换的不等比较

2.3逻辑运算符

&&全部满足为真
||一个满足为真
!取反

短路逻辑:

条件&&(操作);
 ||短路:实现浏览区兼容问题:二选一 

三、位运算

<<左移:m*2的n次方 
>>右移:m/2的n次方 

四、赋值运算

+=  -=  *=  /=  %=  ++  --

五、三目运算符

条件?操作1:操作2;
满足条件做操作1,不满足做操作2;
​
嵌套:
条件1?操作1:条件2?操作2:默认操作;

Day02

一、自定义函数

1.1创建函数并调用

方式一:

var 函数名=function(){
  操作;
}

方式二:

function 函数名(){
  操作;
}

1.2作用域

  1. 全局:任何地方都能使用

  2. 局部:函数内部使用

没写return,最后的return值是undefined

1.3声明提前

程序执行之前,将var声明的变量和function声明的函数,提前到当前作用域的顶部,变量比函数轻,但是赋值留在原地

1.4按值传递

var a=2;
b=a;
深拷贝;相当于复制了一份给b,b的改变不会影响a
​
var a=[1,2,3];
b=a;
浅拷贝,两者共用,b的改变会影响a

二、预定义全局函数

前辈们提前写好的,我们程序员可以直接使用的,全局(在任何地方都可以使用)

  1. 编码和解码: 问题: url中不允许出现多字节字符,如果出现会乱码 utf-8编码格式下,一个汉字,占3字节 解决:发送前,前端将多字节字符编码为单字节字符(数字、字母) 发送后,后端接住,然后将单字节字符解码为原文

使用:

编码:var code=encodeURI("汉字");
解码:var 原文=decodeURI(code);
  1. isFinite(num):判断num是不是无穷大 true->有效数字 false->无穷大

    为false的:NaN  Infinity  分母为0
    不能用来判断是不是NaN
  2. parseInt/Float、isNaN、eval 

三、分支结构

switch(条件/变量){
  case 值1:
操作1;
  case 值2:
操作2;
  default:
}
一般要结合break,否则满足一个case会自动执行后面的case,case比较不带隐式转换

四、JS动画

通过css完成动画

animate.css动画库

引入.css
加类名
加动画时间

Day04

一、循环结构

1.1while循环

while(条件){
  操作;
}

1.2do while循环

do{
  操作;
}while(条件)

和while的区别:do while会先执行一次操作

1.3for循环

for(var 循环变量=几;循环条件;循环变量的变化){
  循环体;
}

1.4终止循环语句

break;//退出整个循环

continue;//退出本次循环,还会继续做下一次

二、数组的基础

2.1创建

直接量方式: var 数组名=[];

构造函数方式

var arr=new Array(值1,......);
缺陷:面试/笔试中: new Array(3);这是什么意思–创建了一个长度为3的空数组

2.2访问

数组名[下标];

2.3释放一个引用类型的对象

每个变量都要释放后才能释放

2.4关联数组

var 数组名=[];
数组名["自定义下标"]=值;
访问:arr["自定义下标"]; 

遍历:把数组中的每一个元素取出来执行相同或相似的操作 问题:不能使用for循环去遍历关联数组,因为length失效了,关联数组的length永远为0,而且我们下标也不再是一个数字

解决:for in 循环

不能设置从哪里开始到哪里结束,所有操作都是自动的

语法

for(var i in 数组名){
   i;//自动得到每一个下标
   数组名[i];//当前hash数组中的元素了
}

既可以遍历hash数组,也可以遍历索引数组

建议:索引数组依然使用for循环,关联数组使用for in
 

面试:hash数组的原理:

hash算法:将字符串交给hash算法,会得到一个尽量不重复的数字,但是字符串的内容相同,那么得到的 数字也一定是相同

添加元素:将自定义下标交给hash算法,得到一个数字(地址值),把要保存的数据放进去了 ​ 读取元素:将指定的自定义下标交给hash算法,得到一个和添加时完全相同的数字(地址值),通过这个地址值 可以拿到当初保存的东西

三、数组的API

3.1数组转为字符串

var str=arr.join("自定义连接符");
 

特殊:

  1. 如果没有传入实参,则和toString效果一致,默认用逗号隔开

固定套路:

  1. 面试笔试中:完成无缝拼接

    arr.join("");
  2. 将数组元素拼接为页面元素(数据渲染)

    获取数据
    将数组转为字符串,并拼接上了标签
    让字符串上DOM树, innerHTML是识别标签

  3. 实现二级联动

    1.必须使用二维数组,细分每一个,并且二维数组的顺序必须和之前的一维数组对应
    2.select.οnchange=function(){} - 状态改变事件,只有选中项发生变化是触发
    3.select可以直接获取当前选中项的下标,不需要自定义下标:select.selectedIndex;
    4.其实绑定事件,等号左边部分就是你的函数名

3.2拼接数组

var newArr=arr.concat(值1,......)

3.3截取子数组

var subArr=arr.slice(starti,endi);

特殊:

  1. 不会修改原数组

  2. 含头不含尾

  3. 如果只传入了一个实参,则为从starti开始,到末尾

  4. 如果两个实参都省略,则复制了—份 – 深拷贝!两者互不影响

  5. 支持负数参数,-n代表倒数第n个

3.4删插替

删除:var del=arr.splice(starti,n);从starti开始删除n个
插入:var del=arr.splice(starti,0,值1,值2...);dels是空数组
替换:var dels=arr.splice(starti,n,值1,值2...);
会改变原数组

3.5翻转数组

arr.reverse();

Day05

一、数组的API

1.1排序

arr.sort();
会按位比较;
  1. 希望按照数字排列 - 升序

    arr.sort(function(a,b){//匿名回调函数,不需要程序员调用,a是后一个数,b是前一个数
        return a-b;
        //如果a>b,就会返回一个正数,说明后一个数>前一个数
        //如果a<b,就会返回一个负数,说明后一个数<前一个数
        //如果a==b,就会返回一个0.说明后一个数==前一个数
        //而sort的底层就能通过你返回的值来判断要不要帮你交换位置
    })
  2. 希望按照数字排列 - 升序

    arr.sort(function(a,b){//匿名回调函数,不需要程序员调用,a是后一个数,b是前一个数
        reyurn b-a;
        })

1.2栈和队列

栈:先进后出

队列:先进先出

开头进:arr.unshift(值,...);
开头出:arr.shift();只能出一个
结尾进:arr.push(值,...);
结尾出:arr.pop();

1.3周期性定时器

名字=serInterval(function(){
   操作;
},时间)

停止

clearInterval(名字)

1.4鼠标移入移出

移入:elem.οnmοuseοver=function(){
  操作;
}
移除:elem.οnmοuseοut=function(){
  操作;
}

二、二维数组

var arr=[
 [值,值,...],
 [值,值,...]
]
使用:
arr[][];

特殊:

  1. 列下标越界,返回undefined

  2. 行下标越界,列下标不越界,报错(因为行下标越界已经得到undefined,undefined不能使用中括号)

三、String的基础概念

什么是字符串:多个字符组成的【只读】字符【数组】

  1. 【只读】︰字符串所有的API都不会修改原字符串,只会返回新的字符串

  2. 【数组】:和数组的相同点

    1、字符串可以使用下标获取某个字符

    2、字符串可以使用length获取字符的长度

    3、字符串可以遍历得到每个字符

    4、字符串可以使用数组不修改原数组的API(concat、slice)

和数组的不同点:所有数组直接修改原数组的API,字符串都不可以使用

四、JS内置对象(引用类型):11个

String Boolean Number(包装类型)

包装类型:专门封装原始类型的值,将原始类型悄悄的变成了引用类型的对象(属性和方法)
为什么:前辈们觉得比如字符串经常会被我们拿来做一些操作,为了方便我们程序员,提供了包装类型,把字符串变成了一个对象,提供了我们一些操作字符串的属性和方法,本身原始类型的值,不带有任何属性和方法,意味着不能使用.去做操作
何时使用:只要你试图使用.去操作原始类型的值的时候,包装类型就会悄悄出现
何时释放:方法一旦调用结束,包装类型就会自动释放
为什么undefined和null不能使用. ,他们俩没有提供过包装类型(没有任何属性和方法)

Array、Function、Data(日期) 、 Math(数学) 、 RegExp(正则:验证)、

Error(错误)

Object(面向对象)

Global(全局对象):1、保存着全局变量和全局函数,只不过浏览器端/客户端/前端global被window代替了,Node.js后端语言的时候全局是global
2、唯独window对象可以省略不写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值