参考资料:web前端开发全程实战

web全栈开发从入门到实战——董雪燕

快速入门JS基础知识

前言

JavaScript是一门实现用户与网页交互的编程语言,与HTML和CSS并称为前端三剑客,主要负责给网页加点灵魂,让其可以与用户交互,这种交互称为事件!基础知识包括变量和常量、数据类型、运算符和表达式、基本控制结构、函数、对象的基本用法!

前端三兄弟的作用

HTML和CSS是一种标记语言,通过标识符号去说明需要的功能,主要运用在网页中展示内容和定义样式,生成静态的网页,也就是内容不可增删,而JavaScript是一门编程语言,可以控制元素的增删,可以控制样式的改变,还可以控制浏览器,从而动态的更新页面中的内容,制作动画特效等交互任务!

引入到HTML文件中

可以内嵌式,把JS代码放在<sript></script>标签对内,一般放置在</body>前,也可以像图片标签一样,通过<script>标签和src属性,引入外部的JS文件,<script src="js.js"></script>

JS工作原理

javascript是运行在浏览器中的一门编程语言,通过浏览器编译执行,实现网页上的一些交互效果!是一门解释型语言,也就是说,运行时才被编译,逐条语句的编译和执行,这样的语言优势是可以跨平台,缺点是运行速度比较慢,一条有错,下面的语句就无法执行!

交互功能原理

交互功能的核心原理是事件驱动模型,通过页面中的元素,或者浏览器等去设置触发事件,相当于是设置一个陷阱或者夹子,浏览器作为被动监听,一直在捕捉行为,当用户或者浏览器与网站中设置的陷阱有交互时,网页就会动态的生成内容,变化页面等,使页面具有一种交互性,动态性!

JS的核心任务就是弄清除用户或系统,怎么与网站实现交互的!

驱动模型三要素

事件源、事件、事件驱动程序

比如,我用手去按开关,灯亮了。

  • 事件源是:开关
  • 事件是:按开关。
  • 事件驱动程序是:灯的亮与灭。

事件源,就是引发后续事件的物体,比如网页中的元素,事件是规定好的一系列行为,比如鼠标单击,事件驱动程序就是我们学习的重点,也就是网页的动态改变,包括改变网页中元素的内容、属性、样式等!

编程思维

先是需求分析,然后提出解决实际问题的方案,需要思考你的程序要实现什么目标,包括哪些功能,细化到一个函数解决!把一个问题想出一套解决方案,这个方案充满因果逻辑关系,不同阶段存在不同的过程,最后完整的解决问题!先干什么、后干什么,如果发生生成,才干什么!

涉及的逻辑结构

顺序结构:一条接一条指令,顺序执行;选择结构:根据情况判断,是否执行,什么条件下执行;循环结构:重复做某事,相当于把这些事,按照顺序复制了N份,直到满足某个条件才停!

注释

  • 单行 //

  • 多行 /* */

打印

一种方法,已经被定义好的方法,属于Window对象或者Document对象里的方法,直接使用!

alert('打印内容');浏览器弹出框

console.log('打印内容');控制台

document.write('打印内容');页面中

JS基础知识

存储数据

可以看作是存储值的容器,相当于空盒子或者水杯,在计算机中,有很多长相一样的容器,可以把写的程序和数据都放进去,为了方便拿取这些数据,需要给每个容器取名字!

变量中存储的值,在程序运行过程中可以改变,常量中存储的值,一旦定义好,后续无法改变

定义变量

指定名称(标识符),通过赋值符,把右边的数据临时存储起来,关键字letvar

let 变量名;		// 只声明
let 变量名 = 值; // 声明并赋予初始值

标识符(取名)

也就是名称的专业术语,一般采用驼峰命名法,下画线分词法、中画线分词法等

并遵循一定规则:

  • 第一个字符必须是字母、下画线、或美元符号
  • 其它字符一般是ASCII字符
  • 不能与关键字、保留字重名

包括数值、字符串、布尔值、数组、对象、函数!也就是各种数据类型的值!

定义常量

一旦设定,无法修改的量,关键字const

const pi = 3.141592

数据类型

值的分类

全部分成六种基本数据类型,数值、字符串、布尔、对象、空、未定义!

  • 数值Number:十进制,科学计数法,其它进制0x 0o

  • 字符串String:一切以单引号’ ‘或双引号“ ”包裹的内容

  • 布尔Boolean:ture或false两个值,其中undefind、null、””、0、NaN、false都是假值;

  • Null:赋值为null;

  • 未定义Undefined:变量未赋值;

  • 对象object:表示复合结构的数据集,包括对象、函数、数组等

类型检测

使用 typeof 关键字来进行数据检测,检测结果就是该数据的数据类型

typeof 待检测的值

类型转换

转数值——把其它类型值,转化为数值

  • Number(); 括号内待转值,结果为转换的数值,如果可以转,结果就是数字,不可以则是NaN

  • parseInt();括号内待转值,结果为转换的数值,同理!当数字和文本结合时,一个一个字符读取转换,可以就转换成数字,不可以就停止,最终结果就是可以转换的数字!

  • parseFloat();与上同理;能解析到小数部分!也就是可以识别第一个点!

  • 乘法运算符*:其它数据乘1后,如果可以转,结果就是数字,不可以则是NaN

转字符串——把其它类型值,转化为字符串

  • String();括号内待转值,结果为转换的字符串

  • .toString();前面填待转值,括号内不用填,结果为转换的字符串

转布尔——把其它类型值,转化为布尔

  • Boolean();括号内待转值,结果为转换的布尔值!除6种false,其它都是true!
  • 双重否定:使用逻辑非运算符!,取反再取反,可以把值转化为布尔值!

运算符与表达式

算术运算

主要对数值间的运行,+ - * / %++ -- - 单目运算

  • +:加法运算

    • 当两边都是数字,两边都是布尔,进行数学运算
    • 当任意一边是字符串,进行字符串拼接,结果是个字符串
  • * / %只能进行数学运算!

  • 前置并参与运算时,先自增(减),再参与其它运算

  • 后置并参与运算时,先参与其它运算,再自增(减)

逻辑运算

也就是布尔值的”算术运算“,&& || !——逻辑与、或、非,是单目

  • 逻辑与是一种短路逻辑,当左侧表达式为假,则直接返回运算结果,不再运算右侧的表达式!

关系运算(比较运算)

大小关系运算 > < >= <=、等值运算== === != !==,结果一定是布尔值

  • > < >= <=
  • == === != !====不考虑数据类型,只看值,===要考虑数据类型!

赋值运算= += -= *= /= %=

一种是把等号右边的值赋值给左边的变量,一种是附加运算,赋值前先运算,再赋值!

条件运算——唯一三目

布尔型表达式 ? 值1 : 值2,运算结果为真时返回值1,运算结果为假时返回值2

typeof a!='undefined' ? a=a : a=0;
a>1 ? a++ : a--;

可以转换成条件结构

if(typeof a != 'undefined')
a = a;
else
a = 0;

数据类型

字符串""

字符串在web应用中,占据非常重要的位置,可以说我们交流的信息,大部分都是字符串!是网页内容的主要形式,这段文本信息必须用单引号或双引号括起来!

定义字符串值

用单引号或者双引号包裹任意长度文本,表示字符串值!单引号和双引号可以相互嵌套,如果需要在字符串中表示特殊字符,使用转义字符\,反斜杠加

连接字符串

把多个字符串拼接在一起组成一个字符串!使用+运算符

注意:当字符串与数值使用加号时,会先把数值转化为字符串,再进行拼接!

数组[]

数组是指申请了一块连续的存储空间,相当于一个容器,用来存放一串有关联的值,比如一个班上的人的名字!如果使用单个变量,存在多个问题,第一是取变量名,第二无法反映数据之间的关系!

并且数组中,也允许存放不同类型的数据,数组大小是可以动态变化,灵活性强!

索引(下标):从0开始,依次加1;

声明数组

let 数组名 = [数据集合]

利用javascript的内置Array对象

let 数组名 = new Array()	// 空数组,也可以直接赋予初始值
let 数组名 = new Array(6)	// 数组长度为6,即能存储多少个值!

逻辑结构

默认是顺序执行,以及根据条件选择是否执行,以及根据条件循环执行多少遍!

分支结构

根据不同情况,做出对应的行为,首先是判断条件,然后是执行的代码块!

if语句

if(){}

根据()内的布尔型表达式,决定是否执行接着的内容!为真时,执行包裹的代码块!

  • ()里面写的是条件,一般是逻辑运算、关系运算,运算的结果只有真或假两种情况;
  • {}里面写的是当条件为真时执行的代码块,一般是处理命令,算法步骤;

if(){}else{}

根据()内的布尔值,为true时执行if后的{}false时执行与之相邻的else后的{}

  • 衍生if(){}else if(){},构成关联,只会执行其中某一种情况,

  • 衍生if(){}else if(){}else{},依次判断,都不满足,执行最后else的代码!

  • 无论一个任务有多少种情况,都可以使用这种结构实现

分支嵌套

某些情况下,使用逻辑运算,可以简化分支结构!

if(a > 0){
if(b > 0){
a = a+b;
}
}

等价于

if(a>0 && b>0){
a = a+b;
}

switch语句

switch(){case 比较值1: case 比较值2: }

根据()内的表达式的值,与case后表达式的、的值进行比较,完全匹配后,执行对应的代码!也可以改写成if第3种模式if(XX===OO){}else if(XX===PP){},本质执行的就是if语句

switch(已知条件){
case 比较值1:
代码块1;
case 比较值2:
代码块2;
}

使用break;

结束语句,跳出选择框!如果没有break;且其中某个值匹配,后面的语句直接穿透执行!即忽视后面case的值,直接执行case对应的语句!从第一个满足条件的位置向下穿透,直到出现break!

switch(已知条件){
case 比较值1:

break;
case 比较值2:

break;
}

使用default:

在所有选项都不符合时,执行默认语句,相当于if语句中最后的else!

循环结构

while循环语句

while(){}

()中为真,则执行{}内的代码块,依次执行结束后,再返回判断()中是否为真,直到表达式的值为假时,才跳出循环,也就意味着使用while()循环时,当()为真时,则开始循环;为假时,则结束循环;如果()一直为真不改变,则是死循环!

while(){}的使用

()的布尔值与{}中的语句无关时,也就意味着()里面的值不会被改变时,其结果要么为真,则一直执行,要么为假,则从不执行,显然这两种状态都不是想要的,一般放一个待改变的值!

通常在()放入变量,一开始时为真,执行{}中的语句,并改变这个变量的值,当执行到想要的次数后,也就是()结果为假时,从而跳出循环!也就意味着()内一般是关于变量的关系运算、逻辑运算

while语句三步走

  • 定义控制变量初始值多少

  • 设置条件判断

  • 执行语句中改变初始值步数

这三步共同来控制循环次数,且控制变量是呈规律的变化!利用规律的步长值参与到其它运算!

定义初始值;
while(初始值>n){
执行语句1
执行语句2
......
改变初始值;
}

do-while循环语句

do{}while();一般情况可以与while(){}可以互换,不同的是,do{}while();是先执行{}中的语句,再判断(){}中的语句至少执行一次,适合连贯的代码节奏!

for循环语句

for(){}

while()一样,定义变量;条件判断;改变初始值,标准的循环三步骤,再加上要循环的代码!更简洁

执行顺序与while()一致,先定义变量,再条件判断,再重复执行的代码,再改变初始值!往复的在循环体前执行条件判断,再循环体后执行改变初始值

  • for()中的小括号,把(定义变量;条件判断;改变初始值)三要素包裹在一起,{}放重复执行的代码!

  • 执行顺序与while()一致,优势是避免忘记设置改变初始值,避免死循环!

  • 可以嵌套使用!

循环嵌套的妙用

for(){for(){}}

当两层循环嵌套,外层循环的初始变量,作为内层循环的判断条件时!

外层循环,通过初始变量,实现控制内层循环的循环次数,通过外层循环变量的步长,来控制内存循环次数呈规律重复次数!

  • 内层for()的条件判断,i<=j是由两个变量构成,共同来控制循环次数,重点是右侧的j是变化的,也就意味着,内层的循环次数,也是由外层初始变量控制!即第1次执行外层,内层循环1次;第2次执行外层,内层循环2次;第3次执行外层,内层循环3次;
  • 到最后,外层执行一次,内层执行9次!外层执行一次,内层执行j次!

for的其它循环语句

for(变量 in 对象){}

可以实现遍历对象,把数组或者字符串的索引,或者对象的属性,赋值给变量,然后执行循环体!

循环次数与对象的值的个数有关

for(变量 of 对象){}

可以实现遍历对象,把数组或者字符串的值,或者对象的属性值,赋值给变量,然后执行循环体!

流程控制

label语句

可以为一行语句添加标签,设置跳转目标

label: 标签名;

break语句

结束当前循环或者switch分支语句,同时可以接受一个可选的标签名来跳出结构语句!

continue语句

循环结构内,跳过本次循环中剩余的代码,转到判断条件!同时可以接受一个便签名来跳出循环!

异常处理器

try/catch/finally语句

按顺序执行,先执行try,如果没有异常,则忽略catch子句,跳转到finally子句

try{
// 调试代码块
}
catch(e){
// 捕捉异常,并进行异常处理的代码块
}
finally{
// 后期清理代码块
}

如果try中有错误,则执行catch子句,同时传入一个参数,可以在catch填写个形参,接受其值!

一般都包括tr、catch子句,finally子句是可选的!

throw语句

主动抛出异常,JavaScript会停止程序正常执行,并跳转到最近的catch子句,如果没有将显示错误!

数据类型

函数function

可以看成是种数据类型,只不过可以存储一大段代码块,这段代码块通常是为了完成一个独立的功能,在使用时只需要通过函数名进行调用!

function关键字定义,分定义和调用!

  • 函数定义阶段(声明函数):把代码装进盒子,不执行函数体内代码
  • 函数调用阶段:把盒子里面的代码执行

定义阶段

关键字function后写函数名()内可以放变量,叫做形参{}内可以存放代码。

function 标识符函数名字(){

装在盒子里的代码
...

}
  • 形参是个特殊的变量,只能函数内部使用,值由调用时,实参决定!

调用阶段

函数名();:调用函数时,就能执行{}内的代码,()可以输入值,叫做实参,也就是给形参赋值!某些函数运行后可以返回值!也就是调用函数后的运行结果!

为什么需要函数

函数可以把实现一种功能,或解决一类问题的代码块存储起来,通过一个函数名就可以调用这一长串代码,用来完成某项任务或者计算,通常把实现某种具体功能的代码封装在函数{}内,比如求阶乘,求最小公倍数。一个函数解决一类问题,只需要输入值,就能输出计算后的结果!

return 值;

当函数有返回值时,可以把函数本身看成是一个值,调用函数时,相当于一个加工工厂,一个有输入,有输出的值!可以把这类函数参与到其它运算中!

这才是函数最重要的功能之一,像一个处理工厂,给原料,就能加工成成品!当然这种函数通常只加工!只处理运算,运算结果只存在于计算机内存中,要想使用输出的结果,还需要另外的代码处理!

没有返回值时,主要把函数看成一个完整功能,有返回值时,可以把函数制当成一个值(处理值的值)!

带有返回值的函数

当函数调用时,添加结果!作为函数的返回值!即运算后是一个值!又变成了一个数据!

像算术运算,+、-、*、/都可以看成是一个函数,运算符两边是输入,返回运算结果!

匿名函数

不需要为函数指明名字,这种函数不能通过名字进行调用执行,通常这类函数与事件绑定在一起,当事件发生时,这个绑定的函数就会自动执行!匿名函数只用出现一次,也就是定义时,而普通函数至少出现两次,一次是定义,一次是调用才执行!总之就是调用方式不一样!

对象{}

可以看成是变量的集合,用于现实中更复杂的事物,具有属性特征、行为特征,比如洗衣机可以洗衣服,还可以放入洗衣粉和衣服,完成洗衣服的操作!比如老师有姓名年龄、授课科目等属性特征,还会说话等行为!

描述属性特征,使用一组键:值对,name:value用冒号分开!

其中描述行为特征,使用函数作为值,在对象中的函数,称为方法!

创建对象:let 对象名 = {}

使用大括号{}包裹很多属性,每一个属性都是一个键值对,就是名:值,对象相当于键值对的集合!可以是数值、字符、数值、函数,多个属性用逗号隔开,最后一个属性没有逗号!

let teacherYan = {
name: 'Yan',
age: 27,
selfIntro: function (){
console.log('大家好,我是'+this.name+',我今年'+this.age+'岁了!');
}
}

console.log(teacherYan.name);
teacherYan.selfIntro();

访问对象的值

  • 通过点位符,teacherYan.name;,执行对象中的属性时teacherYan.selfIntro();
  • 通过指定键名,teacherYan['name'];

this

对象中的方法,使用对象中的属性时,为什么要用this?因为方法内部只认全局变量、局部变量、形参,使用this是告诉方法,到对象内属性中找!

方法

方法需要和属性配合,完成对属性变量中值的修改,或访问值来实现其它功能!切记,方法与属性必然有联系!

对象的特征

主要包含两部分,属性方法,通过一系列的变量来声明属性,通过函数来声明方法

原装对象及方法

JavaScript提供了很多内置对象,共我们直接使用,以String对象、Array对象为例!

实例化对象

要想使用对象中的方法,必须先实例化,成为对象的儿子,或者复制一份对象,或者指向对象,反正与对象产生联系!使用关键字new,对象名后接一个括号,就创建了一个对象!新对象返回后,使用变量保存,这个变量就是实例,这个过程叫做实例化!

let hi = new String('hello world');

每个实例都可以调用对象的方法,并且每个实例间还可以不一样!在创建时可以赋初始值,这样每个实例又都不一样了,并且每个实例还可以自己创建新的属性!

接口API

JavaScript提供了很多内置对象,编程人员可以通过定义一个对象实例,就可以访问这些内置对象的方法和属性,而这些提前封装好的属性和方法,常常称为接口!

JavaScript进阶

通过内置对象,去处理字符串、数组,以及对函数、对象的深入了解!

数组常用方法

帮助我们对数组进行快速操作,记住就行,没有逻辑

  • push()方法,将数据追加到数组末尾
    • 语法:数组.push(数据)
    • 返回值:数组最新的长度
  • pop()方法,删除数组末尾数据
    • 语法:数组.push()
    • 返回值:被删除的数据,一个数据值!
  • unshift()方法,数组最前面添加一个数据
    • 语法:数组.unshift(数据)
    • 返回值:数组最新的长度
  • shift()方法,删除数组最前面的数据
    • 语法:数组.shift()
    • 返回值:被删除的数据,一个数据值!
  • reverse()方法,将数组反转
    • 语法:数组.reverse()
    • 返回值:反转后的数组,一个数组
  • splice()方法,删除数组中若干数据,并选择是否插入新的数据!截取并拿走,会改变数组
    • 语法:数组.splice(开始索引,多少个,要插入的数据)
      • 开始索引:默认为0
      • 多少个:默认为0
      • 要插入的数据:默认没有,如果写的话,从哪儿删除,从哪儿插入
    • 返回值:以数组的形式,返回被删除的数据
  • sort()方法,对数组进行排序
    • 语法有三种:
      • 数组.sort(),结果为位排序
      • 数组.sort(function(a,b){return a-b}),传递一个函数作为参数,结果为升序
      • 数组.sort(function(a,b){return b-a}),传递一个函数作为参数,结果为降序
    • 返回值:排序好的数组

  • join()方法,将数组变成一个字符串,形式为数据+连接符,原数组无变化!

    • 语法:数组.join(连接符)
    • 返回值:连接好的字符串
  • concat()方法,将其它数组和原始数组拼接在一起!两个数组合并成一个数组。

    • 语法:数组.concat(其它数组)
    • 返回值:合并好的数组
  • slice()方法,截取数组中部分数据,相当于切片面包

    • 语法:数组.slice(开始索引,结束索引)
      • 开始索引:默认为0
      • 结束索引:默认为数组长度,注意是索引包括之前,不包括索引之后的数据。
    • 返回值:以数组形式,返回截取的数据
  • indexOf()方法,查找数据,在数组中,的索引

    • 语法:数组.indexOf(数据)
    • 返回值:一个数字
      • 有该数据,返回第一次出现的索引位置;
      • 没有该数据,返回-1
  • forEach()方法,遍历数组

    • 语法:数组.forEach(function(item,index,arr){})
    • 传递一个函数作为参数,数组有多少个数据,这个函数就执行多少次!
      • item:数据的每一项
      • index:索引
      • arr:原始数组
    • 返回值:无
  • map()方法,映射数组

    • 语法:数组.map(function(item,index,arr){})
    • 添加一个映射条件即可,以return的方式书写
      • item:数据的每一项
      • index:索引
      • arr:原始数组
    • 返回值:映射好的数组
let arr=[1,2,3,4,5,6,7,8]
let retnum=arr.map(function(item,index,arr){
return item*10; //以return的方式书写映射条件
})
console.log(retnum);
  • filter()方法,过滤数组

    • 语法:数组.filter(function(item,index,arr){})
    • 添加一个过滤条件即可,以return的方式书写
      • item:数据的每一项
      • index:索引
      • arr:原始数组
    • 返回值:过滤好的数组
    let arr=[1,2,3,4,5,6,7,8]
    let retnum=arr.filter(function(item,index,arr){
    return item>5; //以return的方式书写过滤`条件`
    })
    console.log(retnum);
  • every()方法,判断数组中每个数据是否满足条件,都满足则返回ture

    • 语法:数组.every(function(item,index,arr){})
    • 添加一个条件即可,以return的方式书写
      • item:数据的每一项
      • index:索引
      • arr:原始数组
    • 返回值:一个布尔值,代表是否每一项都满足条件
    let arr=[1,2,3,4,5,6,7,8]
    let retnum=arr.every(function(item,index,arr){
    return item>5; //以return的方式书写判断`条件`
    })
    console.log(retnum); //返回false
    let arr=[1,2,3,4,5,6,7,8]
    let retnum=arr.every(function(item,index,arr){
    return item>0; //以return的方式书写判断`条件`
    })
    console.log(retnum); //返回ture
  • some()方法,判断数组中,是否有数据满足条件,有一个满足则返回ture

    • 语法:数组.some(function(item,index,arr){})
    • 添加一个条件即可,以return的方式书写
      • item:数据的每一项
      • index:索引
      • arr:原始数组
    • 返回值:一个布尔值,代表至少有一项满足条件
    let arr=[1,2,3,4,5,6,7,8]
    let retnum=arr.some(function(item,index,arr){
    return item>5; //以return的方式书写判断`条件`
    })
    console.log(retnum); //返回ture
  • 总结,前7个方法都会直接改变数组,后9个不改变原始数组!

字符串常用方法

字符串可以看成是数组,也是按照索性进行排列的,一个字符就是一个索引位置!这就是字符串的排列!

  • charAt()方法,获取字符串索引位置的字符,从索引是从0开始计数。
    • 语法:字符串.charAt(索引)
    • 返回值:对应索引的字符
  • toLowerCase()方法,将字符串中字母全部转换成小写
    • 语法:字符串.toLowerCase()
    • 返回值:转换好的字符串
  • toUpperCase()方法,将字符串中字母全部转换成大写
    • 语法:字符串.toUpperCase()
    • 返回值:转换好的字符串
  • replace()方法,替换字符串,将字符串内,第一个 满足换下内容的片段替换成换上内容
    • 语法:字符串.replace(换下内容,换上内容)
    • 返回值:替换好的字符串
  • trim()方法,去掉字符串首尾空格!中间空格不会去掉!
    • 语法:字符串.trim()
    • 返回值:去掉首位空格的字符串
  • split()方法,按照分隔符,将字符串,切割成一个数组!这个分隔符存在于字符串中!
    • 语法:字符串.split(分隔符)
    • 返回值:切割数据后的字符串数组!
  • 统一说三个方法,都是截取字符串,返回截取出来的字符串
    • substr()
      • 语法:字符串.substr(开始索引,==多少个==);
    • substring()
      • 语法:字符串.substring(开始索引,结束索引);
    • slice()
      • 语法:字符串.slice(开始索引,结束索引);
  • 总结,都不会改变原来的字符串,以返回值方式使用!

数字常用方法

  • random(),获取0~1之间的随机小数,包含0,但不包含1,小数点后最多保留17位!

    • 语法:Math.random()
    • 返回值:0~1之间的随机小数!
  • round(),对数字进行四舍五入的取整

    • 语法:Math.random()
    • 返回值:四舍五入后的整数
    console.log(Math.random(10.4));
    //打印10
  • 两个方法取整

    • Math.ceil(),向取整
      • 语法:Math.ceil(数字)
      • 返回值:向上取整后的整数
    • Math.floor(),向取整
      • 语法:Math.floor(数字)
      • 返回值:向下取整后的整数
  • pow(),幂运算

    • 语法:Math.pow(底数,指数)
    • 返回值:运算结果
  • sqrt(),算术平方根

    • 语法:Math.sqrt(数)
    • 返回值:运算结果
  • abs(),绝对值

    • 语法:Math.abs(数)
    • 返回值:运算结果
  • max(),最大值

    • 语法:Math.max(数1,数2,数3···)
    • 返回值:运算结果
  • min(),最小值

    • 语法:Math.min(数1,数2,数3···)
    • 返回值:运算结果
  • PI,Π值,这是个属性

    • 语法:Math.PI
    • 返回值:运算结果

时间常用方法

时间(Date)也是JS中的一个数据类型,通过时间对象创建时间实例!

创建时间变量,new Date()创建当前终端时间,new Date(代表年的数字,月,日,时,分,秒),注意月

let time = new Date()

获取时间

  • 时间对象.getFullYear(),获取年份
  • 时间对象.getMonth(),获取月份,返回数值!0代表一月,以此类推!
  • 时间对象.getDate(),获取日期
  • 时间对象.getHours(),获取时
  • 时间对象.getMinutes(),获取分
  • 时间对象.getSeconds(),获取秒
  • 时间对象.getDay(),获取星期几,0代表周日!
  • 时间对象.getTime(),获取时间戳,单位为ms毫秒

设置时间

把上述get变成set,没有设置星期,是按日期自动匹配,带有与日期相关的数值参数!

  • 时间对象.setFullYear(数字),获取年份
  • 时间对象.setMonth(数字),获取月份,返回数值!0代表一月,以此类推!
  • 时间对象.setDate(数字),获取日期
  • 时间对象.setHours(数字),获取时
  • 时间对象.setMinutes(数字),获取分
  • 时间对象.setSeconds(数字),获取秒
  • 时间对象.setTime(数字),把数字的时间戳单位为ms毫秒,转化为年月日时分秒,传递给时间对象