一、学习一门编程语言的基本步骤

 (1)了解背景知识:历史、现状、特点、应用场景

 (2)搭建开发环境:编写hello world

 (3)变量和常量

 (4)数据类型

 (5)运算符

 (6)逻辑结构

 (7)通用小程序

 (8)函数和对象

 (9)第三方库、框架

 (10)实用的项目

二、JS概述

  (1)发展历史

    1995年,JS最早出现在netscape浏览器中

    2009年,JS遵循CommonJS规范,开始向服务器端发展

  (2)特点

    弱类型语言(弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。)

    解释型语言,编译一行、执行一行

    跨平台

    基于对象

  (3)应用领域

    网页中的交互效果

    移动App

    web服务器

三、搭建JS开发环境

   浏览器中,内置的JS解释器

   服务器中,需要安装NODEJS

      https://nodejs.org  NODEJS官网

  运行方式

     (1)NODEJS下

        创建js文件

        node  c:/xampp/..../02.js

     (2)浏览器下

        创建js文件

        创建html文件

            <script  src="02.js"></script>

        双击打开html

四、JS语法规范

  (1)区分大小写

  (2)每行结束的分号可加可不加,习惯上都加

  (3)分为单行注释(//...)和多行注释(/*....*/)

  变量

 变量就是用于存储数据的容器

  x=1   y=2

 (1)声明变量

   使用关键字  var

    var x=1;

 (2)变量的命名规范

   可以使用字母、美元符号、下划线、数字,不能以数字开头。

  不能使用关键字和保留字作为变量名

  userName   isOnsale     驼峰命名

  user_name   is_onsale   下划线命名

 (3)一次声明多个变量

   var chinese=90,math=95;

   多个变量之间用逗号隔开。

 (4)声明变量未赋值

   var a;

   a的值为undefined(未定义)

常量

  一旦声明不能再重新赋值。

  例如:圆周率、春节、中秋节...

  const pi=3.14;

 

数据类型

  1.分为原始类型和引用类型(原始类型值是不可变的、引用类型值是可变的)

  原始类型分为数值型、字符串型、布尔型、未定义型(undefined)、null(空)*(

  Typeof 可以查看数据类型)

 (1)数值型

  分为整型和浮点型

  整型在内存占4个字节,浮点型占8个字节

  整型分为8进制(0开头)、10进制、16进制(0x开头)

  浮点型分为指数型和普通

       2.147e9 

 (2)字符串类型

   数据被引号所包含就是字符串类型,不区分单双引号。

   查看某一个字符的Unicode编码

     't'.charCodeAt()

 (3)布尔型

   在程序中表示真或者假

   true/false

   常用于一些是否的结果

     isVip、 isOnsale、isLogin

 (4)未定义型

   声明了一个变量,未赋值结果是undefined

 (5)空(null)

   用于引用数据类型

 检测数据类型

   typeof()  

   number/string/boolean/undefined/object

2.数据类型转换

 (1)隐式转换

  ①数字+字符串:数字转成字符串

     1+'a'  // '1a'

  ②数字+布尔型:布尔型转成数字  true->1  false->0

     1+true  //2

     1+false  //1

  ③字符串+布尔型:布尔型转成字符串

     'a'+true  // 'atrue'

  ④null的加法

    1+null    //1    null->0

    true+null //1     true->1  null->0

    'a'+null  //'anull'    null->'null'

 实例:

  var num1=3,num2=true,num3='hello';

  console.log(num1+num2+num3); //'4hello'

  console.log(num2+num3+num1);//'truehello3'

  console.log(num3+num1+num2);//'hello3true'

  - * / 执行运算

   尝试将符号两端的数据转成数值型(自动调用Number转换),如果无法转换,返回NaN(Not a Number)

  总结:加号的作用

    执行加法运算;执行字符串的拼接。

 (2)强制转换

  ①将数据转成数值型

    Number( )

    将任意的数据转换成数值型,如果被转换的字符串中含有非数字,则返回NaN;布尔型会转成数值型。

  ②将数据转换成整型

   parseInt()

   parseInt('1.5')// 1

   查看数据的开始是否为数字,遇到非数字则返回前边的数字。

   如果开头是非数字,则返回  NaN

 ③将数据转成浮点型

   parseFloat()

 

 ④将数据转换成字符串

   toString()

     var pi=3.14;

     pi.toString()

运算符

运算符和表达式

 由运算符连接的操作数据,所组成的形式称为表达式

 (1)算术运算符

  +  -  *  /  %  ++  --

  %   取余(应用:隔行换色、通过身份证获取性别等)

  ++  自增,在原来的基础之上加1

  --   自减,在原来的基础之上减1

  console.log(a++)  先打印a的值,然后再自增

  console.log(++a)  先自增,然后再打印a的值

示例1:

  var a=3;

  console.log(a++  +  ++a);//8

  a++先获取a的值(3),执行自增,此时a的值是4;

  ++a先让a执行自增,执行自增后a=5,然后再获取a

示例2:

 var b=5;

 console.log(--b + b--);

  --b 先让b执行自减(4),获取b的值(4)

  b-- 先获取b的值(4), 然后执行自减

 (2)比较运算符

  >=  <=  >  <  ==(等于)  !=  ===(全等于)  !==

  返回的结果是布尔型的值

  ==   只是比较两个数据的值是否相同

  ===  不仅比较数据的值,还比较两个数据的类型是否相同

  3>'10' // false

     数字和字符串比较,字符串转成数值型

  '3'>'10' //true 

     两个字符串比较,比较的是Unicode码

     3->51   1->49

  3>'10a'  //false

  3<'10a'  //false

  3=='10a'//false

   NaN和任何的数字比较(> <  >=  <=  ==  ===)返回false;

   NaN==NaN  返回false

 (3)逻辑 运算符

  ||  或者     &&  并且     非 !

  || 关联的两个条件只需要满足其一,结果就是true,否则false

  &&  关联的两个条件都满足,结果是true,否则false

  !  取反

  逻辑短路

  ||  当第一个条件为true的时候,就不需要执行第二个条件

  && 当第一个条件为false的时候,就不需要执行第二个条件

 示例:下边的代码是否会报错

 var a=3;

 a>5  &&  console.log(ename);

 a<1  ||  console.log(ename);

 (4)位运算符

  将数据转成二进制然后执行运算

  1  10  11  100  101  110  111  1000  1001...10000

      2            4                              8             16

   101101=100000+1000+100+1

              32   +  8  +  4  + 1

   56 = 32 + 16 + 8

        100000 + 10000 + 1000  = 111000

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

  按位或(|)   上下两位含有1,结果是1,否则是0

  按位异或(^) 上下两位相同是0,不同是1

  按位右移(>>) 删除二进制的最后n位,变小到原来一倍

  按位左移(<<) 在二进制的最后添加0,变大到原来一倍

  示例: 5&9=1   8|10=10   6^12=10

  0101     1000       0110

  1001     1010       1100

 (5)赋值运算符

    =   +=  -=  *=   /=   %=

     在原来的基础之上进行加减乘除取余

      x+=3;

逻辑结构

1.运算符——三目运算符

 由三个运算数或表达式组成的结构

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

 如果条件表达式为true,执行表达式1;

 如果条件表达式为false,执行表达式2;

2.两个浏览器端函数

 alert()  弹出警示框

 prompt()  弹出提示(输入)框,输入的值是字符串类型

3.流程控制

 程序=数据+算法

 程序分为顺序执行、选择执行、循环执行

 (1)if语句

 语句1;

 if(条件表达式){

   语句2;

 }

 语句3;

  ①执行语句1

  ②如果条件表达式为true,执行语句2

  ③执行语句3

 

 (2)if-else语句

语句1;

if(条件表达式){

  语句2;

}else{

  语句3;

}

语句4;

  执行过程:

   ①执行语句1

   ②执行条件表达式,如果是true,执行语句2;如果是false,执行语句3

   ③执行语句4;

如果if和else后的大括号中只有一行代码,则大括号可以省略

if(score>=60)  console.log('及格');

 条件表达式中几个特殊的情况

undefined、null、0、''、NaN 在条件表达式中都表示false

 (3)if-else嵌套

  用于判断多种情况

语句0;

if(条件表达式1){

  语句1;

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

  语句2;

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

  语句n;

}else{

  语句n+1;  //以上所有的条件表达式均为false

}

  执行过程:

   ①执行语句0

   ②执行条件表达式1

     如果条件表达式1为true,执行语句1

     如果条件表达式1为false,执行条件表达式2

        如果条件表达式2为true,执行语句2

        如果条件表达式2为false,执行条件表达式n

   ③如果以上所有的条件表达式都为false,执行语句n+1

 (4)switch-case

   和if-else类似,是一种特殊的多项分支语句

语句0;

switch(表达式){

  case 1:    //如果表达式的值为1

    语句1....

    break;

  ...

  case n:

    语句n...

    break;

  default:

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

}

  说明:表达式和case中的值比较的时候使用的是全等于(===)。

 对比if-else嵌套和switch-case语句

 相同点:两者都可以用于多项分支语句

 不同点:if-else既可以判断相等,又可以判断不相等,适用范围比较广;switch-case只适用于全等的情况,在结构上更为清晰合理,执行效率相对比较高。

2.循环执行

 循环:就是一遍又一遍执行相同或者相似的代码

 循环的两个要素

   循环的条件:控制循环的次数

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

 while循环

while(循环条件){

  循环体

}

 

1.break关键字

  可以结束任何形式的循环

 

2.do-while循环

 

do{

  循环体

}while(循环条件);

 先执行一次循环体,无论循环条件是否为true

 示例:打印50~1之间所有的数字

 示例:打印1~100之间所有的偶数

 示例:打印100  95  90  85  80  75  70

 示例:计算1~100所有能被7整除的数字的和

 示例:计算10的阶乘

 示例:计算1~20所有能被3整除的数字的乘积。

 示例:声明一个变量保存密码'123456',循环弹出提示框输入密码,如果输入正确,弹出警示框提示'login success',结束循环。   05_dowhile.js   05_dowhile.html

3.for循环

for(初始值;循环条件;循环的变化){

  循环体

}

示例:计算1~100之间所有数字的和

 

示例:打印50~20之间所有的奇数

示例:计算1~10之间所有数字的乘积

示例:假如本金10000,年利率是4%,5年后本金和利息一共有多少

4.break和continue

  break:结束循环,后续不会再执行其它的循环

  continue:跳过本次循环,继续执行下一次循环

  示例:计算1~100之间所有偶数的和(遇到奇数跳过)

  示例:打印1~100所有数字,如果能被3整除,或者能被4整除,就跳过。1 2 5 7 10 11 13...

  示例:打印本世纪的前10个闰年,先计算本世纪的闰年个数。

5.循环嵌套

 while、do-while、for循环之间可以相互嵌套

 *****

 *****

 *****

 *****

 *****

 *

 **

 ***

 ****

 *****

 1*1=1

 1*2=2  2*2=4 

 1*3=3  2*3=6  3*3=9

函数和对象

1.函数

 parseInt()/parseFloat()/alert()/prompt()/Number()...

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

 函数(Function):有时也被称为方法,是一段预定义好,并可以被反复使用的代码块。

 (1)创建普通函数

function 函数名称(){

  函数体——封装反复使用的代码块

}

  调用:函数名称()

 (2)创建带有参数的函数

function 函数名称(参数列表){//形参——用于接收数据

  函数体

}

 调用:函数名称(参数列表); //实参——实际传递的数据

 参数列表:可以是0个或者是多个,之间用逗号隔开;创建时的参数称为形参(形式上的参数),调用时的参数称为实参(实际的参数),调用的时候,实参的值会按顺序赋给形参。

 形参本质上就是变量,只能在函数内部使用。

 示例:创建函数getSum,传递1个参数,计算1~任意数字之间的和。

 示例:创建函数getRun,传递2个参数,打印任意两个年份之间所有的闰年。

 (3)带有返回值的函数

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

  函数体

  return 返回值;

}

 调用:函数名称(参数列表)

 return表示函数调用后,返回的结果。

 注意:

   如果函数中没有写return或者return后没有任何的值,默认返回undefined

   return后函数体中所有的代码都不会被执行

 示例:创建函数getMax,传递2个参数,返回最大值。

 示例:创建函数getMax,传递3个参数,返回最大值

 示例:创建函数isRun,传递1个参数(年份),返回是否为闰年,是返回true,不是闰年返回false

 示例:创建函数getStatus,传递1个参数(订单状态码),返回对应的中文。 

  1-待付款 2-待发货 3-运输中  4-已签收 5-已取消  其它-无法查询

2.作用域

 就是变量和函数的可访问范围。

 分为全局作用域和局部(函数)作用域

 全局作用域:在代码任何地方都能访问。

 局部(函数)作用域:只能在当前函数的内部访问。

 (1)变量声明提升

   JS程序执行前,在当前作用域下使用var声明的变量会提升到最前边,但赋值还是在原来的位置。

 (2)函数提升

   函数和变量一样,在JS程序执行前,把使用function关键字创建的函数提升到最前边。

 注意:如果函数名和变量名一致,变量会覆盖函数;(先提升函数,再提升变量)

3.递归(了解)

 在函数的内部调用自身

 递归在使用的时候需要有结束条件,结合return

 

 斐波那契数列

 1  1  2  3  5  8  13  21  34 ...

F[n]=F[n-1]+F[n-2](n>=3)

1.匿名函数

  没有名称的函数   function(){   }

 创建函数——函数声明

 function fn(){   }

  (1)创建函数——函数表达式

 var 函数名称=function(形参列表){

    函数体

    return 值;

 }

 调用:函数名称(实参列表)

  对比函数声明和函数表达式的区别

  函数声明存在函数提升,可以在任意位置创建,也可以在任意位置调用。

  函数表达式不存在函数提升,存在变量提升,必须先创建再调用。

  示例:使用匿名函数创建函数getSum,传递1个参数,返回1~任意数字之间所有的和。

  (2)匿名函数自调用

  (function(){  

    函数体;  //是一个局部作用域,无法被外界访问

  })();

  (3)匿名函数以参数传递——回调函数

 function add(a){

   //形参a就相当于是函数名称

   a();  //调用传递的匿名函数

 }

 add(function(){ ... })

2.全局函数

 parseInt  将数据转为整型

 parseFloat  将数据转为浮点型

 encodeURI  对URL进行编码

 decodeURI  对已经编码的URL进行解码

 isNaN  检测数据是否为NaN  是->true  不是->false

 isFinite  检测数据是否为有限值  是->true  不是->false

 eval  执行字符串中的表达式  eval('1+2')  ->  3

 示例:使用弹出提示框输入一组JS表达式,使用eval执行这组字符串表达式。  06_eval.js  06_eval.html

3.对象

 对象是一组属性(property)和方法(method)的集合。

 哪能是对象?

  电视:属性有品牌、长、宽、分辨率、显卡,方法有被观看、发声、玩游戏...

  一个汽车:属性有颜色、类型、品牌、空间大小,方法有代步...

  万物皆对象

 (1)JS中的对象

  内置对象:JS提供的

  宿主对象:根据JS不同的执行环境划分

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

 (2)创建自定义对象——对象直接(字面)量

  使用大括号{} 创建空对象

  属性名和属性值之间用冒号隔开

  多组属性之间用逗号隔开

  属性名中的引号可加可不加,如果有特殊字符,必须添加引号

  示例:创建一个部门对象,属性有部门编号,名称,员工数量

  示例:创建一个员工对象,属性有编号,姓名,性别,生日,工资,所属部门。

 (3)使用内置构造函数创建对象

 var book=new Object();  //创建空对象

 book.title='三国演义';  //添加属性,属性名不能加引号

 book['author']='罗贯中';//添加属性,属性名必须加引号,如果不加引号,被认为是变量。

 示例:创建手机对象,属性有品牌,颜色,大小,产地.

 示例:创建学校对象,属性有编号,名称,地址,建校时间

 (4)获取对象的属性值

 对象['属性名']

 对象.属性名

 如果要获取的属性不存在,返回undefined

 (5)遍历对象中的属性

  获取对象中的属性名及其属性值

 for(var key in emp){

   key 要遍历的每一个属性名

   emp  要遍历的对象

   emp[key]  通过属性名来找到属性值

 }

 示例:创建一个用户对象,属性有编号,用户名,密码,手机,邮箱,使用for-in遍历该对象的属性。

 注意:for-in只能遍历自定义的属性,无法遍历预定义(JS自动添加)的属性

 (6)检测对象中是否含有某个属性

   '属性名'  in  对象  //true->存在   false->不存在

   对象.hasOwnProperty('属性名') //true->存在  false->不存在

   对象.属性名===undefined  // true->不存在 false->存在

 (7)对象中的方法

  var person={

     name: 'tom',

     say:function(){

        this.name  //this指代当前的对象名称 person

     }

  }

  调用方法: person.say();

 数组

   数组是由多个元素组成的集合,是数据集合。每一个元素就是一个数据。

1.创建数组

  (1)数组字面量

    [元素1,元素2...]

    数组中可以存放任意类型的数据

  (2)内置构造函数

    new Array(元素1,元素2...)

    new Array(5)   //初始化数组长度为5,可以继续添加第6个...

   访问数组中的元素

     数组名称[下标]   下标从0开始

     如果下标中没有元素,返回undefined。

    示例:创建数组,保存若干个用户名

    示例:创建数组,初始化长度为3,添加3门课程。

2.获取数组元素的个数

  数组.length

  使用数组元素个数可以在最后添加一个新元素

  数组[ 数组.length ] = '数据';

  示例:创建一个空数组,使用数组的长度添加3个手机品牌。

3.数组分类

  数组分为关联数组索引数组

  关联数组:以字符串作为下标,需要单独添加每个元素。

  索引数组:以整数作为下标

4.遍历数组元素

  (1)for-in

 for(var key in person){

    key  要遍历的元素的下标

    person[key]   每个元素下标对应的数据

 }

 (2)for循环

 var arr=['a','b','c'];

 for(var i=0;i<arr.length;i++){

    i  代表数组的下标,从0开始

    arr[i]  下标对应的元素

 }

 只能遍历索引数组

创建数组,保存若干个汽车的品牌,把'宝马'改为'BMW'

var car=['奔驰','宝马','奥迪'];
//遍历数组中的元素
for(var i=0;i<car.length;i++){
//查看元素是否为‘宝马’
if(car[i]=='宝马'){
//如果为true,把该元素的数据改为‘BMW’
car[i]='BMW'
  }
}
console.log(car);

 创建函数getCount,传递两个参数(数组,要查找的元素),返回要查找的元素在数组中出现的次数。

function getCount(arr,value){
//要查找value在arr中出现的次数
//声明一个变量保存出现的次数,初始化0
//遍历数组中的元素,如果满足,次数加1
for(var i=0,count=0;i<arr.length;i++){
if(arr[i]==value){
count++;
  }
 }
return count; } console.log(getCount([
'a','b','c','c'],'c'));

创建函数getAvg,传递一个参数(数组中保存了若干个成绩),返回平均分

function getAvg(arr){
//遍历arr,获取每一个元素的和,在初一元素个数
for(var i=0,sum=0;i<arr.length;i++){
sum+=arr[i];
}
return sum/arr.length;
}
console.log(getavg([83,79,65,92]));

 创建函数getIndex,传递两个参数(数组,要查找的元素),如果找到,返回下标,如果找不到返回-1

function getIndex(arr,value){
//查找数组arr中的value元素
//遍历数组arr
for(var i=0;i<arr.length;i++){
//判断数组中的元素是否为value
if(arr[i]=value){
return i;
  }
  }
return -1; } console.log(getIndex([
'a','b','c','d'],'c'));

5.数组中的方法(API)

 API - 应用程序编程接口,预先定义好的函数/方法

 toString()  数组中的元素转为字符串,按照逗号分隔

 join()  数组中的元素转为字符串,按照指定的字符分隔数组中的元素。

 concat(arr1,arr2...)  拼接两个或者更多的数组

 slice(start,end)  截取数组中的元素,start开始的下标,end结尾的下标,不包含end本身;负数表示倒数第n个

 创建数组,保存a~h,每个元素存储1个字母,截取bc和ef,拼接成一个新数组

 splice(start,count,value1,value2...)  删除数组中的元素,start开始的下标,count删除的数量,value1,value2删除后替换的元素。start为负值表示倒数第n个

 reverse()  翻转数组中的元素

 sort()  对数组中的元素进行排序,默认按照Unicode码由小到大排序

  sort(function(a,b){

  return a-b;  //数字由小到大

  //return b-a;  //数字由大到小

});

//冒泡排序-数字从小到大的排序
var arr=[23,9,78,6,45];
//外层循环;控制循环的轮数
for(var i=1;i<arr.length;i++){
//每一轮循环的次数=长度-i
//内层循环:每轮循环的次数
for(var j=0;j<arr.length-i;j++){
//如果当前的元素大于下一个元素的值,则位置交换
if(arr[j]>arr[j+1]){
var tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
  }
 }
}
console.log(arr);

创建函数getMax,传递一个参数(数组),返回最大值

function getMax(arr){
//初始化一个变量,用于存相互最大值,假设第一个元素最大值
var max=arr[0];
//从第二个元素开始比较,如果该元素大于max,则把该元素放入到max中
for(var i=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
  }
 }
return max;
}
console.log(getMax([5,8,18,24,79]));

  push()  往数组的末尾添加一个元素,返回数组的长度1.数组API

  pop()  删除数组末尾的元素,返回删除的元素

  unshift()  往数组的开头添加一个元素,返回数组的长度

  shift()  删除数组开头的元素,返回删除的元素

2.二维数组

  数组中的每个元素也是数组

var arr=[ [],[],[]... ]

  访问数组中的元素   数组[下标][下标]

3.字符串对象

 包装对象:让原始类型的数据也可以像引用类型一样,具有属性和方法。

 JS提供了3种包装对象:String、Number、Boolean

 将任意的数据包装成字符串对象

   new String(true)  //'true' ,返回类型为object

   String(true)//  'true',返回类型为string

 字符串对象本质上还是字符串,在使用中和字符串没有任何区别。

 转义字符  \

  转换字符的意义(作用)

  \n   将字符n转换成换行符

  \'   将引号转成普通的字符

  \t   将字符t转换成制表符(tab键效果)

  ...

  打印出现   welcome to chi\na

 字符串中的API

  toUpperCase()  将英文字母转为大写

 toLowerCase()  将英文字母转为小写

初始化4个英文字母(aMtC)并保存到变量中;循环弹出提示框,在提示框中输入4个英文字母(不区分大小写),如果输入正确结束循环。

  字符串.length  获取字符串的长度

  charAt()   获取下标对应的字符    字符串[下标]

 

  charCodeAt()  查看某个字符的Unicode编码

 遍历字符串'javascript',获取a出现的次数。

  indexOf()  查找某个字符第一次出现的下标,找不到返回-1

  lastIndexOf()  查找某个字符最后一次出现的下标,找不到返回-1

 创建函数checkEmail,传递1个参数(要检测的邮箱),如果字符串中含有@,返回true,否则返回false。

  slice(start,end)  截取字符串,start开始的下标,end结束的下标,不包含结束本身;如果为负数,表示倒数第n个

 

 使用变量保存身份证号,获取其中的年月日以及性别。

    '110230199802183572' -> 1998年02月18日 男

  substr(start, count)  截取字符串,start开始的下标,count截取的长度;start为负值表示倒数第n个,count为空表示截取到最后。

 

 使用变量保存一个邮箱,分别获取邮箱的用户名和域名

     jerry123@sina.com.cn

     获取@的下标, 0~下标   下标下一位~最后

  将一个英文单词的首字母转为大写,其余转为小写。

    'heLLo'   ->   'Hello'

  split()  按照指定的字符,将字符串转为数组。

3.匹配模式(了解)

  作用:用于查找、替换字符串

  replace(value1,value2)  查找并替换; value1要查找的字符串,value2要替换的字符串。value1可以使用字符串,也可以使用正则表达式 /china/ig

     i->ignore 忽略大小写    g->global 全局查找

  match(value)  用于查找匹配的字符串,返回一个数组

  search(value)  用于查找满足条件的第一个字符的下标,如果找不到返回-1; 和indexOf功能类似。

4.Math对象

 1)Math对象不需要使用new关键字

 abs()   取绝对值

  floor()  向下取整

  ceil()  向上取整

  round()  四舍五入取整

  max()  取一组数字的最大值

  min()  取一组数字的最小值

  pow(x,y)  取x的y次幂

  PI  取圆周率

  random()  取随机数  1>范围 >=0  

2)通过Unicode码获取对应字符

  String.fromCharCode( 编码 )

3)Date对象

  用于对日期时间进行存储和计算

  (1)创建Date对象

   new Date('2018/12/25 10:30:50')

   new Date(2018,10,25,10,30,50) //第2个参数月份范围0~11

   new Date()  存储当前的系统时间

   new Date(1000*60*60*24)  存储的是距离计算机元年的毫秒数对应的日期时间

 (2)获取Date对象中的日期时间

   getFullYear/Month/Date/Hours/Minutes/Seconds

   /Milliseconds(毫秒)/Day(星期)/Time(距离计算机元年毫秒数)

   星期日~星期六 范围0~6

 (3)转为本地日期时间格式

   toLocaleString()   //年-月-日  时:分:秒

   toLocaleDateString()  //年-月-日

   toLocaleTimeString()  //时:分:秒

 (4)设置日期时间

   setFullYear/Month/Date/Hours/Minutes/Seconds/

   Milliseconds/Time

   setTime设置距离计算机元年的毫秒数,一旦设置后,所有的日期时间都会受到影响。

创建Date对象,保存员工的入职时间'2018-11-16',3年后合同到期,合同到期前一个月续签合同,如果续签时间是周末,提前到周五。提前一周通知人力准备续签(提醒时间)。

  分别打印入职时间、到期时间、续签时间、提醒时间。

 

计算当前时间距离2018年圣诞节还有  ?天?时?分?秒

5.Number对象

  new Number(数据) 

   创建Number对象,同时将数据转为数值型。

  toFixed(n)  保留小数点后n位

  toString(n) 将数值型转为字符串类型,n设置转换的进制(2,8,16)

  Number.MAX_VALUE  获取计算机能存储的最大数值

  Number.MIN_VALUE  获取计算机能存储的最小数值

6.Boolean对象

  Boolean() / new Boolean()

  创建Boolean对象,同时将数据转为布尔型

  !!数据   将数据转为布尔型(!!表示俩个非表示肯定)

  toString()  将布尔型数据转为字符串

7.ES6

  ECMAScript6

  ES2017  ES2018

  (1)块级作用域

块级作用域特点:用大括号、大括号中使用let(let声明的变量只能在内部使用)

    使用let关键字声明的变量,只能在块级作用域下访问;

    块级作用域:{  }  if、else、while、do-while、for里边大括号都是块级作用域。

    let关键字声明的变量不存在声明提升。

  (2)箭头函数

    是回调函数的另一种写法,和匿名函数不完全一致;

   sort( (a,b)=>{

     return a-b;

   } );

    如果函数体中只有一行代码,并且是return形式,可以简化为

    sort( (a,b)=>a-b );

(3)函数中的参数

   ES6允许为形参设置默认值,如果没有传递实参,则自动调用形参的默认值。

  function add (num1, num2=7){   }

 (4)模板字符串

 ` 在此之间可以写任意形式代码 ${JS语法} `

  示例:创建一个员工对象,包含姓名,性别,生日,工资;使用模板字符串打印员工信息

   '姓名:**,性别:**....'

2.错误处理

 (1)常见的错误

  SyntaxError  语法错误,错误的使用了中文符号,缺少括号...程序不会执行

  ReferenceError 应用错误,使用了未声明的变量,会影响后续代码的执行

  TypeError  类型错误,错误的使用了数据的类型。例如把变量当函数使用,把对象当函数使用。会影响后续代码的执行

  RangeError  范围错误,参数的使用超出了范围,会影响后续代码的执行    例如:new Array(3.5)

 (2)错误处理

 try{

   尝试执行可能出现错误的代码

 }catch(err){

   捕获出现的错误,把错误信息放入到err中

   错误处理的方案

 }

ES6电子版:http://es6.ruanyifeng.com/

程序员必做50题

https://wenku.baidu.com/view/af66e2f14afe04a1b071de42.html

posted on 2019-11-13 20:48  瓦尔登  阅读(372)  评论(0编辑  收藏  举报