JS基础知识(下)

07 语句

1 什么是语句

概念:语句就是整句或命令。

特征:大多数编程语言中要以分号结尾;

Var a=110; //是一个语句

2 语句的分类

声明语句

var和function都是声明语句,它们声明或定义变量和函数。

例子:

vra a=99;// 指令 命令 声明变量

function f(){} //声明函数

表达式语句

具有副作用的表达式,就可以形成一个语句,需要我们加上分号。

例子:

let r = 1+1;

let res = "hello" + "world~"

条件语句

if(布尔值){}

if(布尔值){}else{}

if(布尔值){}else if(布尔值){}else if(布尔值){}else{}

switch(值){case 值:xxx; break; case 值:xxx;  break; default:xxx}

注意细节:

1、在if后面的小()中放的是条件表达式,不一定只是true或false,条件表达式的结果要么是true,要么是false

2、在if后面的小()中放的是字面量表达式(1,"a", "hello", undfined, null, ""),这个字面量表达式会发生隐式类型转化

3、只有undefiend, null, 0, -0, NaN, "" 会转成false, 其它都转化成true

4、在if语句后面可以不写大括号,前提是这个{}里面只有一条语句,如果有多条语句,相当于使用了{}把第一条语句包起来,不管有几条语句,最好都使用{}给包起来的

5、对于三元运算符来说,前面放表达式(条件表达式或字面量表达式),如果这个表达式是真就是执行前面的表达式,否则执行后面的表达式

6、可选可不选使用if(){}    二选一使用if(){}else{}或三元运算符   多选一使用if(){}else if(){}else if(){}else{}或switch

7、对于switch来说,()里面的值和case后面的值的是严格匹配。

8、在Switch语句中,break是跳转语句,是用来结束程序的

9、在Switch语句中,default后面的break可以不写

循环语句(重要,多做题)

for(循环变量; 条件; 循环变量++){循环体}

注意细节:

  1. for循环也是同步任务,只能等到for循环执行完后,才能执行for循环后面的代码
  2. for循环后面的三个表达式是可以省略  了解就OK
  3. for循环可以嵌套,如果for循环里面又嵌套了一个for循环,就叫双重for循环...
  4. 对于for循环嵌套,最多三层,for循环嵌套性能非常差,一般就是一层或二层。

while(条件){循环体;要改变条件}

do{循环体;要改变条件}while(条件)

注:while循环可能一次也不执行,do-while至少要执行一次循环体。

注意细节:

  1. 需要在while循环体中改变循环变量,如果不改变,会出现死循环。
  2. 需要在while循环之前把循环变量定义好。
  3. while循环中的()里面可以放字面量表达式,也可以放条件表达式。
  4. while循环的{}如果省略了,默认只会循环while后面的第1条语句,建议不管有几种语句,都加上{}

跳转语句

  1. break;

注:break在如下几个地方出现:

switch中有break     如果满足某个case,那么整个switch就结束了

在条件语句中也可以出现break

2)continue

3)return

注意细节:

  1. break可以出现在switch,for中(需要配合if)来终止switch或for。
  2. continue终止本次循环,继续下一次循环

08 面向对象

1 初识对象

面向对象?

面向对象是一种编程思想,现在主流的编程语言都有这种思想。

Js中数据的分类?

在js中任何一个数据都能找到它对应的类别。

在js中一个类的标识符首字母大写

类和对象?

类是抽象的,是每一类事物的抽象

对象是某一类的具体,对象也叫实例

基本对象:

使用.运算符来操作对象中的属性或方法,有人把方法也叫属性,在js中的对象是属性的无序集合。属性与属性之间用逗号隔开。

获取对象中的属性,直接对象名.属性名就可以获取

获取对象中的方法,对象名.方法名() 调用方法

创建对象的两种方式:

字面量,{}

new运算符 通过类(构造器)

类的分类:

JS的内置类,程序员自己写的类

1)内置类:Number String Boolean Array Function Object....

2)可以通过()给对象赋值

2 单体内置对象

Date类 提供了日期的相关操作  new Date

Math类 提供了数学的相关操作,有一个非常重要的函数:random() 随机一个小数,范围[0, 1)

09 数组

1 什么是数组?

数组是值的有序集合。

数组的作用:一次性存储多个数据

创建数组的两种方式:

字面量  var 数组名=[];

使用new运算符  var 数组名=new Array();

数组元素:数组中的值有一个别名叫做元素。数组中元素的数据类型可以不一样。

数组的长度:数组的元素个数,比如有3个元素,就说这个数组的长度是3.

数组的索引(下标):用来存储或者访问数组中的数据,索引从0开始,到长度减1。

数组的长度和索引的关系:长度减1就是最大的索引的值。

数组存储?

数组是引用数据类型,存储在堆区

注意细节:

    1. JS中的数组中可以放任意数据类型,但是有的编程语言中,数组中的数据类型必须一致。
    2. JS中的数组是动态的,可以根据里面的元素自动的增长或者缩减,但是有的编程语言中,数组的长度上来就是固定好的。
    3. JS中的数组它的索引,默认是0开始的,依次递增,但是可以不连续。
    4. 访问一个数组中不存在的元素得到的结果是undefined

2 操作数组

在计算机中,提到操作,主要就是指增删改查(CRUD)操作.

在JS中,每一个对象中都有一个特殊的属性,叫__proto__ 一般叫隐式原型。

在每一个数组中,有非常多的方法,大概有30个左右。

添加元素:索引和方法;

  • 通过索引(下标)去添加元素
  • push()方法 在数组的末尾添加元素,返回新数组的长度,改变原数组
  • unshift()方法 在数组的开头添加元素,返回新数组的长度,改变原数组。

删除元素:方法;

  • pop()方法:从数组中删除末尾元素,返回被删除的元素,改变原数组;
  • shift()方法,从数组的开头删除元素,返回被删除的元素,改变原数组;

修改元素:索引和方法;

  • 通过索引(下标)去修改元素
  • join()方法:将一个数组(或一类数组对象)的所有元素连接成一个字符串,(如果数组中,只有一个项目,那么将返回该项目而不使用分隔符,)返回字符串,不改变原数组
  • concat()方法:用于合并两个或多个数组,返回一个新数组,不改变原数组。
  • reverse()方法:将数组中元素的位置颠倒,并返回颠倒后的数组,改变原数组
  • sort()方法: 对数组进行排序,并返回排序后的数组,改变原数组
  • slice()方法:用来截取数组的 返回一个新的数组对象,不改变原数组
  • toString()方法: 把数组转换成字符串,返回字符串,(表示指定的数组及其元素),不改变原数组。

查看元素:for循环遍历,forEach遍历(增强的for循环)

3 多维数组

二维数组:在一个数组中嵌套了一个数组

三维数组:在一个数组中嵌套了一个数组,在嵌套的那个数组中又嵌套了一个数组

10 字符串

1 字符串?

在Js中,字符串需要使用单引号或双引号引起来,建议使用单引号。

字符串是基本数据类型,存储在栈区。

创建字符串的两种方式:字面量;new一个类

注:可以把字符串当做一个字符串数组。

2 字符串的方法?

查找字符的方法

  • chartAt() :从字符串中查找某个字符的位置,返回查找的字符,不改变原字符串。

注:当charAt中的索引超过了length-1,得到是一个空串,不是undefined

  • indexof():从字符串中自左至右寻找字符第一次出现的索引(下标),返回该索引如果未找到该值返回-1,不改变原字符串。(索引从左到右以0开始)
  • lastIndexof()从字符串中自右至左寻找字符第一次出现的索引(下标),返回该索引如果未找到该值返回-1,不改变原字符串。(索引从左到右以0为基数)
  • search():从字符串中自左至右寻找字符第一次出现的索引(下标),返回该索引,如果未找到该值返回-1,不改变原字符串。注:正则表达式

修改字符的方法:

  • substr():substr(start[, length]),截取字符串,第一个参数是开始的位置(索引),第二个参数是截取的长度,返回新的字符串,不改变原字符串。

注:如果start为负值,strLength +start。其中strLength为字符串的长度(例如,如果start-3,则被看作 strLength + (-3)

  • substring(): substring(indexStart[,indexEnd]),截取字符串,第一个参数是开始的位置(索引),第二个参数是结束的位置(索引),返回新的字符串,不改变原字符串。

注:indeEnd 可选。从0开始到字符串长度之间的整数,半开半闭区间

注意细节:

  1. 如果 indexStart等于indexEnd,substring返回一个空字符串。
  2. 如果省略indexEnd,substring提取字符一直到字符串末尾。
  3. 如果任一参数小于 0 或为NaN,则被当作 0。
  4. 如果任一参数大于stringName.length,则被当作stringName.length。
  5. 如果indexStart大于indexEnd,则substring的执行效果就像两个参数调换了一样。

 

  • slice():提取某个字符串的一部分,返回新的字符串,不改变原字符串

注:语法:str.slice(beginIndex[,endIndex]) 如果beginIndex为负值,则strLength + beginIndex。其中strLength为字符串的长度(例如,如果beginIndex-3,则被看作 strLength + (-3));如果endIndex为负值,strLength + endIndex

  • concat()方法:合并字符串(与+相似)返回新字符串,不改变原字符串。
  • replace() 替换字符串的某个字符,返回新的字符串,不改变原字符串

注意:默认情况下,replace只替换一次, 真正强大的地方,也是在正则表达式中

  • split()将字符串转换成数组,返回数组,不改变原来的字符串

注意:字符串得有一定规律才能转换成数组

  • toLowerCase():将字符串转换成小写,返回新字符串,不改变原字符串。
  • toUpperCase():将字符串转换成大写,返回新字符串,不改变原字符串。

截取字符串 substr() substring() slice()相同点和不同点

相同点:

  1. 三个方法都是截取字符串
  2. substring()与slice()两个参数都为正数时截取的字符串相同;都是半开半闭区间
  3. substr()与slice()第二个参数都为0时,返回值都是空串,无意义

不同点:

  1. Substr() 第一个参数表示从索引(基数为0)开始,第二个参数表示截取的长度。长度为负值或0时为空串,无意义;
  2. substring() 第一个参数是开始位置的索引,第二个参数是结束位置的索引,如果任一参数小于 0 或为NaN,则被当作 0。第二个参数为0时,返回值为索引0到第一个参数的索引,但不包括该索引的字符;
  3. slice() 第一个参数表示开始截取位置的索引,第二个位置表示截取结束位置的索引,如果任一参数小于0,则字符串长度加上该参数的值。第二个参数为0时,为空串,无意义。

一些重要的概念

1 代码段

一个script就是一个代码段;在上一个代码段中定义的变量,在下一个代码段中也可以得到。在下一个代码段中定义的变量,在上一个代码段中得不到。

2 进程和线程

进程(工厂):浏览器是多进程的,tab页就是一个进程

线程(工人):在一个进程中有1个或多个线程,线程是真正干活

JS的运行环境:浏览器 

Js是单线程的:当JS代码放到浏览器中时,浏览器会开一个线程来执行JS代码,JS是单线程。默认只会从上到下执行代码(任务),只有上一个任务执行完毕后,才有执行下一个任务。如果遇到一个非常耗时任务,JS线程就要把这个耗时任务执行完毕,再去执行后面的任务。在JS中有很多任务非常耗时,如果就让这一个线程来处理,会造成阻塞状态。

为了解决上面的问题,JS提出异步的解决方案,把任务分成两类,一类是同步任务,一类是异步任务。

大部分任务都是同步任务,只有一部分任务是异步任务。

3 同步和任务和异步任务

现在写的代码都是同步代码,都是从上到下执行。

4 全局作用域和局部作用域

1)全局作用域:整个代码最外层的作用域就是全局作用域,静态的,代码没有执行,作用域也是存在的。

2)局部作用域:函数内部的作用域就是局部作用域。

作用域是静态的,不管代码执行与否作用域都存在。

5 全局执行上下文和局部的执行上下文

当代码真正在浏览器跑起来时,才会产生执行上下文

全局执行上下文:默认先产生一个全局的执行上下文

局部执行上下文:调用函数时会产生局部执行上下文,也叫函数执行上下文

6 数据存储

基本数据类型存储在栈区,引用数据类型存储在堆区

内存地址

一些总结

1 Undefined都出现在哪些地方?

  1. 当没有给一个变量赋值时,这个变量的值是undefined,变量值的数据类型是undefined
  2. 当函数没有显示指令返回值时,默认这个函数返回undefined
  3. 当访问一个对象中不存在的属性时,得到的也是undefined
  4. 当访问一个数组中不存在的元素时,得到的也是undefined

2 判断一个数据是否是数据

例子:

Console.log(arr instanceof Array)

Console.log(arr isArray(arr))

Console .log(typeof(arr))

Typeof不精确 去判断数据得到的是object

3 回调函数

如果把一个函数作为另一个函数的参数,那么作为参数的那个函数叫回调函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值