JavaScript学习总结第一周

110 阅读10分钟

JavaScript:

简称js,是一个运行在客户端浏览器的解释型、弱类型、面向对象脚本语言。
1. 解释型:运行之前不会检查代码是否正确 直接执行 遇到错误停止后面代码
2. 弱类型:变量保存的数据由数据类型决定能保存什么变量
3. 面向对象:前期简单来说只要遇到  对象名.属性名(方法名) 这种格式就叫做面向对象
js的特点:
1. 任何编辑器都可以编辑js代码
2. 解释型
3. 弱类型
4. 面向对象
5. css完成不了的他都能完成
js的使用:
1.直接在HTML里面创建一个标签,并在里面写代码<script>代码</script>
2.直接在HTML里面创建一个标签,并且在外部创建一个js文件--xxx.js文件:<script 
src="xxx.js">不能写代码</script>          
打桩输出/输出方式/检查错误
 1.console.log()
 2.document.wirte()  这是在HTML页面输出(如果绑定了点击事件,页面内容会全部被替换掉,这样页面就白写了)
 3.alert()  浏览器会弹出警告框,在警告框内输出(有时候会卡住页面,导致整个页面加载不出来,用户就看到一个白板)  
☆变量
   1.创建之后 值可以再次进行修改
   2.使用时间:以后我们使用任何数据,都会提前把他保存在一个变量中,以后使用变量名,就是在使用里面的值
   3.如何创建:var 变量名=值
   4.创建之后 可以不赋值,默认值是undefined
   5.可以创建多个变量,用逗号隔开            
常量
 1.创建之后,值不允许再次跟换,如果跟换会报错
 2.如何创建:const 常量名=值

用户输入框 prompt("请输入您的:")

☆数据类型(两大类)

原始类型/基本类型/值类型:5个:

 1.*Number* 数字类型
 取值无数个,不用任何操作,直接写——控制台(蓝色)
 2.*String* 字符串
 取值无数个  必须用 " " 或者' ' 包起来——控制台(黑色)
 3.Boolean  布尔类型
 取值只有两个 true/false
 常用于作为条件判断,配合在分支里面更厉害——控制台(蓝色)
 4.Null 空的
 取值只有一个 就是null(本身) 常用于释放变量——控制台(灰色)
 5.Undefined 未定义的
 取值只有一个,就是undefined(本身)记住,undefined是个垃圾,干啥啥不行,这是祖师爷的一
 个错误——控制台(灰色)

引用/对象类型:有11个,可以展示理解为由11个属性和方法等待我们学习

☆☆☆运算符

算数运算符
 + - * / %
 特殊 % 取余(取模)两个数相除取的不是商,而是除不尽的余数
 作用:(1)判断奇偶数(2)取出某个数字的后n位
    console.log(1234%10)//4
    console.log(1234%100)//34
    console.log(1234%1000)//234
 带有隐式转换:会将数据类型转换,例如把左右两边都转为数字,再运算
 特殊:
    true——1
    false——0
    Null——0
    undefined——NaN
    "100"——100
    "100px"——NaN
 注意:
    确实可以转为数字——前提必须是纯数字,但凡包含了非数字字符,都会转为NaN
    NaN (not a number)不是一个有效数字  
    缺点:
       参与任何算符运算都为NaN
       参与任何比较运算都为false
 最后还有一个 + 运算
   特殊点:如果遇上字符串,左右两边都会转为字符串,+ 运算不再是加运算,而是拼接
   
关系运算符/比较运算符
 > 、 < 、 >= 、 <=  、 != 、 == 、!== 、 ===
1.比较运算符一般用于分支结——结果只有两个————true/false
2.默竟运算符带有隐式转换 会将左右两边转为数字  再比较大小
3.如果都为字符串 会根据16进制(Unicode)/十进制(ASCII)进行按位PK 
4.数字0-9<大写A-Z<小写a-z<汉字
5.NaN参与任何比较运算都为falseisNAN(X) 判断NaN,结果一般是一个布尔值:true(有效数字)/false(无效数字,也就是一个NaN6.undefined==null——true
  解决方法:使用全等===
  ===  : 不带任何隐式转换的等值比较,要求数据类型相同,值相同
逻辑运算符(在比较运算符之上再综合比较)
1.&&  与运算(并且)
  全部都满足为true,有一个不满足都为false
2.||  或者
  全部都不满足,结果为false  有一个满足,就为true
3. ! 非
  !true->false
  !false->true
赋值运算符
= 、+= 、-= 、*= 、/=、%=
1. = 就是把=右边的东西保存到 = 的左边的变量名中
2.后面五个可以理解为一种升级写法;一句话两个操作,运算后在保存会变量本身
  变量名 += 值 ———— 变量名 = 变量名+值
自增自减运算符
++  --
例如: i++  /  i--
1.自增:固定的 每次只能+1
2.累加:+=每次可以加n  由程序员自己决定
3.笔试题:前++ 和后++ 的区别
   单独使用时,前++ 和 后++ 没有任何区别
   但是如果参与了其他表达式,变量始终都会+1 但是前++和后++返回的结果不同
   前++返回的是加了之后的新值
   后++返回的是加l之前的旧值
位运算
1.左移:m<<n,读作m左移了n位,翻译:m*2的n次方
2.右移:m>>n,读作m右移了n位,翻译:m/2的n次方      

分支结构:两大类

☆☆if分支:三种写法
1.一个条件,一件事,满足就做,不满足就不做
 if(条件){
      操作;
 }
2.一个条件两件事:满足就做操作1,不满足就做默认操作
 if(条件){
     操作1;
 }else{
     默认操作;
 }
3.多个条件多件事,满足谁就做谁,如果都不满足,就做默认操作
 if(条件){
     操作1;
 }else if(条件){}{
     操作2;
 }else if(条件){
     操作3;
 }else{
     默认操作;
 }
 注意:
   (1)分支只要满足一条路,就不会再走其他路;
   (2else if 想写多少写多少 由程序员自己决定
   (3else这句话可以省略不写,但是不推荐,如果条件不满足,则什么都不操作
   (4)分支可以嵌套
☆☆Switch……case分支
 语法:
     switch(变量/表达式){
          case 值:
          操作1breakcase 值:
          操作2breakcase 值;
          default:
          默认操作;
     }
    特殊:
      只要case满足,会将后续的操作全部做完 解决————break;
      建议:每一个case的操作后面都已跟上一个break;
           有些地方可以不加break1)最后一个操作default可以省略break;
           (2)如果中间有多个条件,做的操作是一样的,则可以省略掉中间部分
    面试题:ifswitch的区别?
       1.Switch……case:优点:执行效率高,速度快(它在做比较的时候是,case做的不是范围操
       作,而是等值比较);缺点:必须要知道最后的结果是什么才可以使用Switch.....case去判断
       2.if——else:优点:可以做范围判断;缺点:执行效率低,速度慢(做的是范围判断)  
     建议:代码开发完毕后,做优化时,尽量少用if——else;尽量将if....else替换成switch...case
    
三目运算
  使用:条件?操作1:条件?操作2:条件?操作3:默认操作
  注意:
     1.默认操作不能省略,省略会报错,其实还算是一个优点
     2.如果操作比较复杂,不能使用三目运算,操作只能是一句话,如果操作多句话,还是推荐if或
     者switch——以后很重要,因为很多时候操作就刚好是一句话

数据类型的转换

注意 :页面上一切的数据js获取到后都是字符串

转字符串:2种
  1.var str=x.to string()x不能是undefinednull
    记住:undefinednull不能使用.的任何操作
  2.var str=string(X);万能 任何都可以转为字符串,完全等效于隐式转换
  转换,其实string()就是隐式转换的底层原理,还不如+""
  不重要,因为在页面上一切获取到的数据都是字符串
☆☆☆转数字 3种
  **1.**parseInt**(str/num)——parse(解析)Int(整数/型)——专门用于将字符串转为整数的
  执行原理:
     从左往右依次读取每个字符,碰到非数字字符就停止转换,如果依赖就是不认识则为NaN,不认识小数点
         console.log(parseInt(35.5));//35
         console.log(parseInt("35.5"));//35
         console.log(parseInt(3hello5));//3
         console.log(parseInt(hello5));//NaN
         console.log(parseInt("35px"));//35
         console.log(parseInt(true));//NaN
         console.log(parseInt(false));//NaN
         console.log(parseInt(undefined));//NaN
         console.log(parseInt(null));//NaN
   **2.**parseFloat(str)**——Float(浮点数、小数)-->专门用于将字符串转为小数的
   执行原理:
      几乎和parseInt一致,认识第一个小数点
         console.log(parseFloat(35.5));//35.5                                              
         console.log(parseFloat("35.5"));//35.5
         console.log(parseFloat(3hello5));//3
         console.log(parseFloat(.5));//0.5
         console.log(parseFloat("35.5px"));//35.5
         console.log(parseFloat(35.5.5));//35.5
   3.var  num = Number(x);万能的,任何人都可以转为数字,完全等效于隐式转换,其实
   Number()就是隐式转换的底层原理,还不如 -0 / *1 / /1
转布尔:
  Boolean(x);万能的,任何人都可以转为布尔,完全等效于隐式转换
  其实Boolean()就是隐式转换的底层原理,还不如!!x
*****只有这6个会为false0""undefinednullNaNfalse
  其余全部都为true

循环结构:

 反复执行 相同 或者 相似的操作
 循环体:要做的事情
 循环变量:记录着我们当前在哪一次,而且他会不断的变化,变化往往都是想着不满足条件前进的
while 循环
 语法:
     var 循环变量=几
     while (循环条件){
            循环体;
            循环变量变化;
     }
     执行原理:
       首先创建出循环变量,判断循环条件,则执行一次循环操作,并不会推出循环,而会回头再次
       判断条件满不满足,如果满足,则执行一次循环操作.....知道循环条件不满足,才会退出循环
       宏观上感觉循环好像是一瞬间就结束了,其实循环是一次一次执行的
 特殊:
    1.有的时候可能真的需要死循环,默认永远不会停止的循环
    何时使用:不确定循环次数的时候
     while(){
        操作
     }
     2.死循环其实有一天也会停下来,如果停不下来,全部都要卵
     break 推出整个循环,多半都是用于配合死循环使用的
     continue 退出本次循环  还会执行下一次操作
☆☆☆for 循环
while的原理是一样的,但是他比while看上去更加的简洁,更加的舒服,那么while能做的事情,for也可以完成

 语法:
    for(var 循环变量=几;循环条件;循环变量变化){
            循环体;
    }
    特殊: 死循环:for(;;){操作;}
    
面试题:whilefor的区别?
   whilefor在原理上来说几乎没有区别
   一般我们不确定循环次数的时候会使用while循环———死循环
   一般我们确定循环次数的时候使用for循环(大部分情况)
do ...while:
垃圾:while 我们都不使用,更不要说这个更加复杂的了
    语法:
       var  循环变量=几
       do{
          循环体;
          循环变量变化;
       }while(循环条件)
面试题:whiledo..while的区别?
  区别只看第一次,如果第一次条件都满足,那么两者都没有区别
  如果第一次条件不满足;while一次都不会执行,而do while 至少会执行一次

☆☆☆☆☆Function(函数)

超级重要
概念:
Function——函数,也称之为方法
  先【预定义】好,以后可以【反复使用】的【代码段】
如何使用函数:
1)在js内部写:函数名()程序员写几次就会调用几次
(2)在HTML页面上绑定事件
例如:<div onclick="函数名()"></div>
   任何元素都可以绑定点击事件
我们以后何时使用函数呢?
1)不希望打开页面立刻执行
(2)希望由用户来触发——提升用户体验感
(3)函数的地位很高,是第一等公民地位
以前就见过函数了,比如css里面的rotate(360deg),url(2.jpg)这种写法叫做带参数的函数:2

带参数的函数:

1)创建出带形参的函数;其实就是一个变量,只不过不需要写var
而且不需要复制,所以称之为叫做形式参数,简称形参
      function  函数名(形参,...){
                    函数体/代码段;       
        }
 (2)使用带参数的函数时,记得必须传入实参——实际参数,就是你传递过去的值!
      函数名(实参,.....)
  注意:
      传参的时候顺序是不能乱的,必须和形参的顺序一一对应上,数量也不要多也不要少;
  总结:没有谁好谁坏
    1.不带参数的函数,用于执行一些固定的操作
    2.带参数的函数,可以根据我传入的实参的不同,执行的操作略微不同
总结:
  循环可以反复执行,函数也可以反复执行,他们的区别在哪里?
    时机不同
    1.循环:几乎是一瞬间就执行完毕了
    2.函数:需要调用后才会执行