JS知识总结

常量

 和变量一样,都是存储数据的容器

 (1)声明后必须赋值,不允许为空

 (2)不允许重新赋值

数据类型

  分为原始类型和引用类型

  原始类型分为数值型、字符串型、布尔型、未定义型、空

 1.数值型

  10进制

  1  2  3  4  5  6  7   8  9  10  ...  15 16

  8进制:以0开头的数字,例如012

  1  2  3  4  5  6  7  10  11 12..

  16进制:以0X开头的数字,例如0XF  不区分大小写

  1  2  3  4  5  6  7   8  9  a  ...   f  10

  浮点型

  3140

  3.14E3

  31.4E2

 2.字符串型

  被引号所包裹的值,引号不区分单双引号

检测数据类型

typeof  值

'number'/'string'/'boolean'/'undefined'/'object'

  查看任意一个字符的编码

         'a'.charCodeAt()

 3.布尔型

  只有两个值,分别是true和false,表示真和假,用于保存只有两个值的数据,例如是否登录,是否为会员,是否已婚...

 4.未定义型

  只有一个值是undefined,表示一个空值;例如声明变量未赋值就是undefined

 5.空

  只有一个值是null,常和引用类型的数据一起使用

数据类型转换

 分为隐式转换和强制转换

 1.隐式转换

   运算过程中,自动产生的转换

   (1)数字+字符串   数字转为字符串

      '2' + 3   //'23'

   (2)数字+布尔型   布尔型转为数字   true->1  false->0

     2+true   //3

     2+false  //2

   (3)字符串+布尔型  布尔型转为字符串

     '2'+true  //'2true'

JS中加号(+)的作用

数字之间的加法运算

字符串之间的拼接运算

NaN : Not a Number 不是一个数字,是在将一个值转换为数字的过程中,没有成功的得到数字结果就是NaN;NaN和任何数字执行数学运算结果还是NaN

  函数:是一个功能体,提供若干的数据,返回结果。—— 饺子机

  所有的隐式转换为数字会自动调用函数Number

 2.强制转换

  (1)强制转换为数字

   Number()

Number('3') //3

Number('3a') //NaN

Number(true) //1

Number(false) //0

Number(undefined) //NaN

Number(null) //0

  (2)强制转换为整型

   parseInt()

   用于将小数或者字符串转为整型,其它类型转换结果为NaN

parseInt(3.5)  //3

parseInt('6a')  //6

parseInt('a6')  //NaN

  (3)强制转换为浮点型(小数)

   parseFloat()

   用于将字符串转为浮点型,其它类型转换结果为NaN

parseFloat('3.14a') //3.14

parseFloat('75')  //75

parseFloat('a3.14')  //NaN

  (4)转字符串(了解)

   toString()

   用于将数字和布尔型转为字符串

var n=2

n.toString()   //'2'

运算符

  表达式:由运算符连接的操作数据组成的格式,最终会是一个值

  运算符分为算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、三目运算符

 1.算术运算符

   +  -  *  /   %   ++  --

   % 取余

   ++  自增,变量的值自动加1

   --  自减,变量的值自动减1

var n2=3

// 先把n2的值赋给n3,然后n2再执行自增

var n3=n2++

var n4=3

// 先让n4执行自增,然后再把自增结果赋给n5

var n5=++n4

 2.比较运算符

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

  ==  等于,比较两个是否相同

  !=   不等于,比较两个值是否不相同

  ===   全等于,不仅比较两个是否相同,还会比较类型是否相同

  !==  不全等于,比较的是两个值不相同或者类型不相同

  (1)数字和字符串比较,字符串转为数字

    3>'10'   //false

  (2)字符串之间比较,比较的是字符的编码

    '3'>'10'  //true

    '3' -> 51   '1' -> 49

   练习:以下哪个比较结果是true

   3>'10a' //false

   3<'10a' //false

   3=='10a' //false

   NaN==NaN  //false

NaN和任何值比较(> < >= <= == ===)结果都是false

 3.逻辑运算符

  &&  逻辑与,关联的两个条件都是true结果是true,否则是false

 

运算符

 1.逻辑运算符

  &&  逻辑与,关联的两个条件都是true,结果是true,否则false

  ||  逻辑或,关联的两个条件有一个是true,结果是true,否则false

  !  逻辑非,取反向   !true -> false    !false -> true

  短路逻辑

    &&  当第一个条件为false,最终结果就是false,不再执行第二个条件

    ||   当第一个条件为 true,最终结果就是true,不再执行第二个条件

 2.位运算符(了解)

  模拟计算机底层的运算,先把值转为2进制再进行运算,运算完再把结果转回成    10进制

  1   2   3    4    5    6     7

 2进制

  1  10  11  100  101  110  111

  &  按位与,上下两位比较,都是1结果是1,否则是0

  |   按位或,上下两位比较,有一个是1结果是1,否则是0

  ^  按位异或,上下两位比较,不同是1,否则是0

  5&7      3&5       7|13        9^15

  101       011       0111        1001

  111       101       1101        1111

———    ———     ———       ———

  101       001       1111        0110

   5         1          15           6

 3.赋值运算符

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

  赋值         运算赋值:先执行运算再执行赋值

   练习:声明变量保存商品的价格,对商品的价格打8折,最后打印价格。

 4.三目(元)运算符

  一目运算符:由一个运算符连接了一个表达式     ++  --  !

  二目运算符:由一个运算符连接了两个表达式  

  三目运算符:由两个运算符连接了三个表达式

     条件表达式 ? 表达式1  :  表达式2

     当条件表达式为true,执行表达式1

     当条件表达式为false,执行表达式2

操作网页元素

 1.查找网页元素

   给标签设置id属性,一个网页中id的值不能出现重复的

   <button id="btn">按钮</button>

 2.给按钮绑定事件,监听用户操作       

   btn.onclick=function(){   点击事件

      一旦监听到用户的操作,要执行的内容

   }

   cont.onfocus=function(){   }   (输入框)获取光标

   cont.onblur=function(){   }   (输入框)失去光标

 3.弹出警示框

   alert()

 4.修改标签之间的内容(修改HTML)

<span id="cont"></span>

cont.innerHTML=值

 5.修改标签的CSS样式

<div id="cont"></div>

cont.style.样式名称=值

例如:cont.style.display='none'

      cont.style.fontSize='20px' 

属性名如果是多个单词组成,采用驼峰命名法

 程序=数据+算法

 程序的执行方式:顺序执行、选择执行、循环执行

流程控制(选择执行)

 1.if语句

  满30减15

 

if(条件表达式){

  语句块

}

  如果if后的语句块中只有一行语句,则大括号可以省略

流程控制

 1.if-else语句

if(条件表达式) {

  语句块1

}else{

  语句块2

}

 2.if-else嵌套

   是多项判断

if(条件表达式1){

  语句块1

}else if(条件表达式n){

  语句块n

}else{

  语句块n+1  // 以上所有的条件都是false

}

 3.switch-case语句

  是一种特殊的多项分支语句,条件只能进行全等于的比较

switch(表达式){

  case  值1:   //如果表达式和值1比较相同

    语句块1

    break   //结束,跳出整个switch-case语句

  case  值n:

    语句块n

    break

  default:  //表达式和每个值比较的都是false

    语句块n+1

}

  说明:如果表达式在和case的值比较过程中,一旦为true,就不再和后边case的值进行比较了。

循环

  循环是重复的执行相同或者相似的代码

  循环的两个要素

     循环条件:控制循环是否往后执行

     循环体:要重复执行的相同或者相似代码

 1.while循环

while(循环条件){

  循环体

}

 2.break

  用于循环体,作用是强制结束循环

do-while循环

do{

  循环体

}while(循环条件)

第一次执行循环体没有判断

从第二次开始才会进行判断循环条件

for循环

for(初始值; 循环条件; 增量){

  循环体

}

break和continue

  两者都是用于循环体

  break 用于结束循环

  continue 用于跳过剩余的循环体,还会继续往后执行

  练习:打印出1~100之间所有整数,不包含能被3或者能被4整除的数字

循环嵌套

 在一个循环的循环体中出现了另一个循环,任意两种循环之间都可以相互嵌套

函数

 parseInt()/parseFloat()/Number()...

 函数:是一个功能体,提供若干数据,返回结果

 函数分为系统函数和自定义函数

 自定义函数:用于封装要重复执行的代码

 1.创建自定义函数

function 函数名称(){

   函数体 —— 重复执行的代码

}

 调用

    函数名称()   //就会执行一次函数体中的代码

 2.创建带有参数的函数

function  函数名称(参数列表){  //用于接收外部传递的值

    函数体

}

  调用

   函数名称(参数列表)  //就是实际传递的值

   创建函数时的参数叫做形参,调用函数时的参数叫做实参,实参会赋值给形参,两者的数量可以不匹配,如果形参未被赋值则为undefined

创建带有返回值的函数

function  函数名称(参数列表){

   函数体

   return值   //返回值,外部调用后得到的结果

}

  调用

    函数名称(参数列表)   //得到函数的返回值

  return用于返回函数调用后的结果

  如果函数中没有写return,或者return后没有值返回的结果是undefined

  一旦return执行,就会结束函数的调用

对比return和break

return用于函数中,结束函数的调用

break用于循环和switch-case,结束循环或者switch-case语句

变量的作用域

 全局作用域,在函数以外的作用域,只有一个全局作用域

 函数作用域,在函数以内的作用域,可能有多个函数作用域

 全局变量,在全局作用域下声明的变量,可以在任意作用域下访问到

 局部变量,在函数作用域下声明的变量,只能在所在的函数作用域访问到

 在函数内,不加var声明的变量是全局变量

 在程序执行前,会将var声明的变量提升到所在作用域的最前边,只是提升声明部分,赋值不提升

 形参属于是局部变量,只能在函数内访问

函数的作用域

 全局函数,在全局作用域下创建的函数,可以在任意的作用域下调用

 局部函数,在函数作用域下创建的函数,只能在当前的函数作用域下调用

 作用域链:作用域之间嵌套所形成的作用域结构;在查找变量的时候,先往当前作用域下查找,如果没有会沿着作用域链往上一级不断查找。

 函数提升,程序执行前,会将函数整体提升到所在作用域的最前边

匿名函数

  function(){   }

 1.创建函数

函数声明

function fn(){

}

函数表达式

var fun=function(){

}

变量名称就是函数名称

  (1)对比函数名称和函数名称()

   函数名称,本质上是一个变量,变量中保存了一个函数类型的值

   函数名称(),在调用函数,执行函数体中的代码

  练习:使用函数表达式创建函数getSum,传递任意两个数字,返回两者之间所有整数的和。

  (2)对比函数声明和函数表达式区别

   函数声明存在函数的整体提升,可以先写调用再写创建

   函数表达式只是存在声明提升,必须先写创建再写调用

函数本身也是一个值,类型是'function'

匿名函数

 1.创建函数

var fun=function(){   }

function fun(){

}

以上两种写法是等价

   面试题:以下程序的输出结果

//var c=function(){     }

var c=2

function c(){

  console.log(1)

}

c()  //报错 TypeError: c is not a function

  正常的情况下,函数先提升,变量声明再提升

  如果函数名称和变量名称相同,函数提升后,变量声明就不再提升了

 2.解决全局污染

   全局作用域:在一个html中script标签下,默认就是全局作用域;每一个外部的js文件,也都是在全局作用域下。

   全局污染:全局变量的出现带来的影响

   解决全局污染:匿名函数自调用

;(function (){

  在函数作用域,变量都是局部变量

})()

 3.回调函数

  就是把一个函数类型的值作为参数传递,传递的函数就称作回调函数;回调函数会自动调用

function xin(madai){

   madai()  //调用传递进来的函数

}

function ming(){

}

xin(ming)

xin(function(){  })

  回调函数的作用:用于获取函数调用后的结果

获取函数调用后结果两种方式

①通过返回值

②通过回调函数,把值放入到回调函数的参数中

递归

  递归是函数内调用自身这个函数

  递归使用不当会产生内存泄露(把分配的内存空间占满,无法运行其它程序)

  递归本身是一个死循环,用递归解决循环的问题。

如何使用递归:要有边界条件,结合着return来使用

  斐波那契数列:第1、2项的值是1,从第3项开始,每一项是前两项相加的和。

  1   1   2   3   5   8   13   21   34   55

  1   1   1   1   1   1  

          1   1   1   1

              1   1   1

                  1   1

                  1   1

                      1

                      1

                      1

系统函数

  isNaN()   用于检测用户输入的值是否含有非数字, 有->true  没有->false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值