Ⅰ.JavaScript命名规范以及语法格式
①标识符命名规范:
变量、函数的命名必须要有意义
变量的名称一般用名词
函数的名称一般用动词
Ⅱ.数组
数组(Array),是指一组数据的集合,其中的每个数据被称为元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在某个变量名下的优雅方式。
①创建数组
*利用new创建数组
var 数组名 = new Array()
Var arr = new Array();
*利用数组字面量创建数组
Var 数组名 = [];
Var 数组名 = [‘red’,’blue’,’green’];
声明数组并赋值称为数组的初始化
数组中可以存放任意类型的数据,例如字符串、数字、布尔值等
数组里面的数据一定用逗号分隔
②数组的索引
索引(下标):用来访问数组元素的序号(数组下标从0开始)
数组可以通过索引来访问(获取得到)、设置、修改对应的数组元素,我们可以通过“数组名[索引]”的形式来获取数组中的元素。
③数组的长度(元素个数)
使用“数组名.length”可以访问数组元素的数量(数组长度),动态监测数组元素的个数
④数组中新增元素
*可以通过修改length长度以及索引号增加数组元素
通过修改length长度来实现数组扩容的目的(length属性是可读写的)
var arr=[1,2,3,4];
arr.length=5;
通过修改数组索引的方式追加数组元素
var arr=[1,2,3,4];
var arr[4]=5;
注意:不能直接给数组名赋值,否则会覆盖掉以前的数据
Ⅲ.JavaScript函数
①函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。
②函数的使用:声明函数和调用函数
*function声明函数的关键字,全部用小写
*函数名一般是动词
*函数不调用自己
③函数的封装:把一个或多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
④函数的参数:形参和实参
Function 函数名(形参1,形参2...){
}
函数名(实参1,实参2...)
*在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数的时候,同样需要传递相应的参数,这些参数叫做实参
*形参---形式上的参数---函数定义的时候传递的参数---并不知道是声明
*实参---实际上的参数---函数调用的时候传递的参数---实参是传递给形参的
参数的作用:在函数内部某些值不能固定时,我们可以通过参数在调用函数时传递不同的值进去。
*多个参数之间用逗号隔开
⑤函数形参和实参的匹配问题
如果形参个数与实参个数一致,则正常输出结果
如果实参的个数多于形参的个数,会取到形参的个数
如果实参的个数小于形参的个数,多余的形参定义为undefined,最终的结果是NaN
⑥函数的返回值
语法格式:
function 函数名(){
return需要返回的结果;
}
函数名();
*函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名(),需要通过return实现
*只要函数遇到return,就把后面的结果返回给函数的调用者,函数名()=return后面的结果
在我们的实际开发里,我们经常用一个变量来接受函数的返回结果
⑦return终止函数
return语句之后的代码不被执行
return只能返回一个值,如果用逗号隔开多个值,以最后一个值为准
⑧函数没有return返回undefined
⑨break,continue,return的区别
break:结束当前的循环体(如for、while)
continue:跳出本次循环,继续执行下次循环(如for、while)
return:不仅可以退出循环,还能返回return语句中的值,同时结束当前的函数体内的代码
⑩arguments的使用
当我们不确定有多少个参数传递的时候,可以用argumens来获取。在JavaScript中,arguments实际上是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
*arguments展示形式是一个伪数组,因此可以进行遍历,伪数组具有以下特点:
具有length属性
按索引方式储存数据
不具有数组的push,pop等方法
*只有函数才有arguments对象,而且是每个函数都内置好了arguments
①①函数可以调用另外一个函数
因为每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况
①②函数中的声明方式
利用函数关键字自定义函数
Function fn(){
}
Fn();
函数表达式
Var 变量名=function(){};
变量名是变量名,不是函数名
①③作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
Js的作用域(es6)之前:全局作用域 局部作用域
全局作用域:整个script标签或者是一个单独的js文件
局部作用域:在函数内部,这个代码的名字旨在函数内部器效果和作用
①④变量的作用域:全局变量 局部变量
特殊情况下,在函数内不使用var声明的变量也是全局变量(不建议使用)
函数的形参也可以看作是局部变量
全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
局部变量在我们程序执行完毕后就会销毁,比较节约内存资源
①⑤块级作用域是es6新增的
①⑥作用域链
只要是代码,就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据可以被内部函数访问,就称作作用域链
Ⅳ.JavaScript预解析
①JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分两部:预解析和代码执行
②预解析:js引擎会把js里面所有的var还有function提升到当前作用域的最前面
③代码执行:按照代码书写的顺序从上往下执行
④预解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升,就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数
Ⅴ.JavaScript对象
①什么是对象
现实生活中,对象是一个具体的事物。在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示(常用动词)
②为什么需要对象
保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。
③创建对象(object)的三种方法
--利用字面量创建对象
对象字面量:就是花括号{}里面包含了表达这个具体事务(对象)的属性和方法
里面的属性或方法我们采取键值对的形式 键 属性名 : 值 属性值
多个属性或方法中间用逗号隔开
方法冒号后面跟的是一个匿名函数
调用对象的属性,使用‘对象名.属性名’的方法或者对象名[‘属性名’]
调用对象的方法,使用‘对象名.方法名’,不要忘记添加小括号
--利用new Object创建对象
var obj = new Object();
我们是利用等号赋值的方法,添加对象的属性和方法
每个属性和方法之间用分号结束
--利用构造函数创造对象
因为前面两种创建对象的方式一次只能创建一个对象,如果有需要重复的相同的代码,且里面封装的是对象,可以利用函数的方法
构造函数就是把我们对象里面的一些相同的属性和方法抽象出来封装到函数里
语法格式:
function 构造函数名(){
this.属性=值;
This.方法=function(){}
}
new 构造函数名();
*构造函数名字首字母要大写
*构造函数不需要return就可以返回结果
*调用构造函数必须使用new
*属性和方法前面必须添加this
变量、属性、函数、方法的区别
变量和属性是相同的,它们都是用来存储数据的
变量是单独声明并赋值的,使用的时候直接写变量名,是单独存在的
属性是在对象里面的,不需要声明,使用的时候必须是对象.属性
函数和方法的相同点:都是实现某种功能,做某件事
函数是单独声明调用的,函数名(),单独存在
方法在对象里面,调用的时候,对象.方法()
构造函数和对象
构造函数是泛指的某一大类,对象是一个具体的事物
利用构造函数创建对象的过程也称为对象的实例化
④new关键字的执行过程
New构造函数可以在内存中创建一个空的对象
This会指向刚才创建的空对象
执行构造函数里面的代码,给这个空对象添加属性和方法
返回这个对象
⑤遍历对象
For..in用于对数组或者对象的属性进行循环操作
for(变量 in 对象){
}