您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

js基础(2)

11.闭包

概念:函数使用了不属于自己的局部变量,这种结构叫闭包(函数套函数)

作用:保护变量的/避免全局污染

性能问题:内存泄漏 作用域中的局部变量一直被使用着,导致该作用域释放不掉

闭包有两个常用的用途;

  • 闭包的第一个用途是使我们在函数外部能够访问到函数内部的变量。
  • 使已经运行结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,

哪些操作会造成内存泄漏?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

  1. 闭包
  2. 意外的全局变量:由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收。
  3. 被遗忘的计时器或回调函数:设置了 setInterval 定时器,而忘记取消它,如果循环函数有对外部变量的引用的话,那么这个变量会被一直留在内存中,而无法被回收。
  4. 脱离 DOM 的引用:获取一个 DOM 元素的引用,而后面这个元素被删除,由于一直保留了对这个元素的引用,所以它也无法被回收。

12.循环语句

循环:程序反复执行一套相同的代码

循环三要素:

1.循环变量:循环中做判断的量 循环变量一定是向着循环退出的趋势去变化

2.循环条件:保证循环继续运行的条件

3.循环体:循环中每次要做的事

while循环

while(循环条件){要做的事}

do while循环

do{要做的事}while(循环条件)

for循环

用途:用作数组遍历

for(var i=0;i<10;i++){要做的事}

var i=0;

i<10;i++;

i<10;i++;

...

break 退出循环,下面程序不再执行

continue 继续,跳过,后面代码不再执行

13.数组

数组:批量存储多个同类数据的,多个数据以逗号隔开,数组是没有任何数据类型限制的,也没有任何数量限制的。

数组其实就相当于多个变量的集合

数组的声明:var arr=[] var arr = new Array(1,2,3,4)

数组的访问:数组名[角标] 二维数组:数组名[角标][角标]

数组的更改 :数组名[角标]=新值

数组的属性:length 直接返回数组的长度 (arr.length)

14对象(一切皆对象)

对象:用来存储多个数据的 是由多个键值对组成的 用来描述一个事物的

相当于多个变量的集合

var obj={} var obj=new Object()

格式 {key:value,key:value} 键/值对 属性名:属性值

对象的属性值是不限制数据类型的

对象的属性名一定是字符串,所以属性名可以省略引号,如果不加,js会自动帮你添加

对象的访问:对象.属性名

对象的更改:对象.属性名=新值 如果本身存在这个属性就是更改,本身如果没有,那就是添加(对象的属性名不可能重复)

对象的属性的删除 delete 对象.属性

delete关键字

对象可以存储函数

info:function(){alert(1)}

调用:obj.info()

对象的循环

for(var 变量名(key) in 要遍历的对象){

变量名代表的是每一轮循环的属性;

}

对象的属性名如果是变量的话,那么需要加 [ ]

对象查找的数据太长可以用变量存储

对象.属性/方法

本地对象

array obj regexp 等可以 new 实例化

宿主对象

浏览器自带的 document,window 等

内置对象

parseFloat()、parseInt() Math 等不可以实例化的

15、面向对象:通过操作对象去实现需求,不关心其中的过程

面向过程: C语言

自定义对象:我们自己创建的对象

基本包装类型:为了便于操作“基本类型值”,JS 提供了 三个 特殊的引用类型:Boolean、Number、String。这些类型和其他引用类型相似,但同时 也具备 与各自基本 类型相应的特殊行为。 实际上:每当读取一个基本类型值的时候, “后台就会创建一个对应的基本包装类型的对象”,从能能够调用一些方法来操作这些数据。

什么是 JavaScript 中的包装类型?

在 JavaScript 中,基本类型是没有属性和方法的,但是为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript 会在后台隐式地将基本类型的值转换为对象,如:在访问'abc'.length时,JavaScript 将'abc'在后台转换成String('abc'),然后再访问其length属性。

JavaScript也可以使用Object/Array/Boolean函数显式地将基本类型转换为包装类型:

也可以使用valueOf方法将包装类型倒转成基本类型:

var a = 'abc'
var b = Object(a)
var c = b.valueOf() // 'abc'

var a = new Boolean( false );  //false被包裹成包装类型后就成了对象
if (!a) {
    console.log( "Oops" ); //不会运行
}

1.String对象 字符串是不容更改的

属性:length

toUpperCase(转大写)

toLowerCase(转小写)

substring(起始,结尾) 含头不含尾

如果只给一个参数,代表从哪一位开始截取,截到最后

slice()同上

indexOf("el") 关键字符的角标 找到就结束 找不到返回-1

toString(转成字符串) 显式类型转换

split("") 可以把字符串以切割符切割成数组 一定会切成数组

2.Number对象

toString(转成字符串)

toFixed(1)按几位小数四舍五入取整

3.Boolean对象

toString(转成字符串)

4.Array对象 https://www.runoob.com/jsref/jsref-obj-array.html

  • 数组和字符串的转换方法:toString()、toLocalString()、join() 其中 join() 方法可以指定转换为字符串时的分隔符。不影响原数组。
  • 数组尾部操作的方法 pop() 和 push(),push 方法可以传入多个参数。影响原数组。
  • 数组首部操作的方法 shift() 和 unshift() 影响原数组。
  • 重排序的方法 reverse() 和 sort(),sort() 方法可以传入一个函数来进行比较,传入前后两个值,如果返回值为正数,则交换两个参数的位置。影响原数组,
  • 数组连接的方法 concat() ,返回的是拼接好的数组,不影响原数组。
  • 数组截取办法 slice(),用于截取数组中的一部分返回,不影响原数组。
  • 数组插入方法 splice(从哪一位开始删除,删几个,新值(增加在删除的位置) ),影响原数组,
  • indexOf() 和 lastIndexOf() 迭代方法 every()、some()、filter()、map() 和 forEach() 方法,不影响原数组。
  • 数组归并方法 reduce() 和 reduceRight() 方法
  • length 不影响原数组。

数组的遍历

方法

是否改变原数组

特点

forEach()

数组方法,改变原数组,没有返回值

map()

数组方法,不改变原数组,有返回值,可链式调用

filter()

数组方法,过滤数组,返回包含符合条件的元素的数组,可链式调用

for...of

for...of遍历具有Iterator迭代器的对象的属性,返回的是数组的元素、对象的属性值,不能遍历普通的obj对象,将异步循环变成同步循环

every() 和 some()

数组方法,some()只要有一个是true,便返回true;而every()只要有一个是false,便返回false.

find() 和 findIndex()

数组方法,find()返回的是第一个符合条件的值;findIndex()返回的是第一个返回条件的值的索引值

reduce() 和 reduceRight()

数组方法,reduce()对数组正序操作;reduceRight()对数组逆序操作

遍历方法的详细解释:https://cuggz.blog.csdn.net/article/details/107649549

16.正则表达式对象RegExp

正则表达式:定义字符串中字符出现的规律

正则表达式要求写在/正则表达式/中

中括号用来存放备选字符

一个中括号只能代表一位字符的匹配规则

正则表达式对于任意连续的区间都可以用-连接

数量词{}

{num} 代表前面一位规则重复几次

{min,}代表前面一位规则至少min,最多不限;

{min,max}代表前面一位规则至少min,最多max

特殊数量词:

? 前面一位可有可无 最多一次 {0,1}

* 前面一位可有可无 最多不限 {0,}

+ 前面一位至少一次 {1,}

预定义字符集:在正则表达式中一些有特殊含义的字符

\d 代表了所有的数字 [\d]

\w 代表所有的数字字母下划线

. 代表任意字符

\s 代表空格

如果备选字符中只有一个备选字符或者只有一个预定义字符集,那么中括号可省略

对于在正则表达式中有特殊含义的字符,如果希望以原文形式去匹配,需要用\转义 \.

test() reg.test(被检验的字符串) 返回布尔值

注意:正则表达式是部分匹配 (连续)

在整条正则表达式的开头加^代表以...开头,在整条正则表达式的结尾加$,代表以...结尾

在中括号开头加^代表除了...都行 [^1]

正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不同?

当使用 RegExp()构造函数的时候,不仅需要转义引号,并且还需要双反斜杠。var re = new RegExp("\\w+");

17.Math对象

abs()取绝对值

round()四舍五入取整

ceil()向上取整

floor()向下取整

min()/max() 注意不接受数组当参数(Math.min(...arr)),只能接受参数序列

random()取0-1之间的随机数

18.Date对象 :封装了所有与日期相关的api

1.创建日期对象:new Date() 默认保存的是当前时间

var target=new Date("2021-6-1 00:00:00)

2.日期对象可以直接相减,得到的是间隔毫秒数

3.getFullYear() 返回是哪年 number

4.getMonth()返回的是月份 0-11 要+1修正

5.getDate() 1-31

6.getDay() 0-6

7.getHours() 0-23

8.getMinutes() 0-59

9.getSeconds() 0-59

10.getMilliSeconds() 0-99911.getTime()返回的是1970-1-1至今的毫秒数

12.以上get方法全改为set即为更改时间,注意,没有setDay()方法

19.Error对象

SyntaxError(语法错误)

ReferenceError(引用错误)

TypeError(类型的错误) 方法与对象不匹配

try{

}catch(errpr){

}


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进