一,JS数据分类
基本数据类型:String,Number,Boolean,null,undefined
引用数据类型:Object对象
基本数据类型的变量直接存储在栈内存中,栈中保存的是变量对应的值;创建引用类型的变量时会先在堆内存中开辟空间来存储这个新建的对象,然后在栈内存中开辟空间保存这个变量,在栈内存中存储的是指向堆内存的地址也就是存储的是对象的引用。
1.创建对象的方法
1)使用构造函数创建对象
2)对象字面量(属性名可以用引号也可以不用,但特殊字符组成的属性名必须加引号)
2.引用数据类型与基本数据类型的区别:
3.typeof运算符检查变量类型
************************************************************************************************************************************************************
二,函数Function(函数也是对象)
1.创建函数
*******************************************************************************************************************************
*2.函数参数
*(1)函数参数的特点
*在函数中声明形参就相当于在函数中声明了对于的变量但是没有赋值。
*1)调用函数时,浏览器解析器不会检查实参的类型,在传参时需要注意参数的类型;
*2)调用函数时,浏览器解析器也不会检查实参的数量,实参数量多余形参时多余的实参不会被赋值,实参数量少于形参数量没有赋值的形参是undefined
*3)函数的参数可以是任意数据类型(基本数据类型,对象,函数等)
*4)在JS中可以不定义形参直接传递实参
*******************************************************************************************************************************
*******************************************************************************************************************************
(2)arguments实参列表(对象)
1)调用函数时,浏览器解析器会向函数中传递两个隐含参数this(函数上下文对象),arguments(封装的实参对象)
2)在调用函数时,实参都会在argumnets中保存。
3)arguments对象是一个类数组对象,可以通过索引操作元素,可以获取长度,但arguments不是数组。
4)arguments对象中有一个callee属性,这个callee指向的就是当前正在执行的函数对象
*******************************************************************************************************************************
instanceof运算符:检查对象(实例)是否是一个构造函数(类)的实例,
*******************************************************************************************************************************
3.函数返回值
return设置函数的返回值,return后面的语句都不会执行
1)如果函数不写return,则函数的返回值为undefined
2)如果return;后面不跟任何值,则函数的返回值为undefined
3)return 后可以跟任意数据类型(基本数据类型,对象,函数等)
break借书当前循环,continue跳过当次循环,return结束整个函数
alert()函数没有返回值
*******************************************************************************************************************************
4.函数对象方法call()和apply()
函数也是对象,就可以有方法和属性
1)call()和apply()方法必须由函数调用
2)当函数调用这两种方法时都会执行函数,与在函数后面加一个()执行结果是一样的
3)可以将一个对象作为call()和apply()方法的第一个实参传递,这个对象会作为函数执行时的函数上下文(this)
4)call()和apply()区别,call()其它实参在第一个实参后一次传递;apply()其它实参封装成数组在对象后传递
*******************************************************************************************************************************
三,作用域
作用域指变量的作用范围。
1,全局作用域
1)直接写在script标签中的JS代码都在全局作用域中;
2)全局作用域在页面打开时创建,页面关闭时销毁
3)全局作用域中变量都是全局变量,在页面任意部分都可以访问到
4)在全局作用域中有全局对象window,可直接使用,它由浏览器创建;在全局作用域中创建的变量都会作为window的属性保存
5)在全局作用域中创建的函数都会作为window对象的方法保存
2,函数作用域
1)调用函数时创建函数作用域,函数执行完毕后函数作用域销毁
2)每调用一次函数就会创建一个新的函数作用域,它们是相互独立的
3)在函数作用域中可以访问到全局作用域中的变量;在全局作用域中无法访问函数作用域中的变量
4)当在函数作用域中操作一个变量时,解析器会先在函数作用域中寻找,找到就使用;没有找到就向上一级作用域中寻找,找到就是用;直到寻找到全局作用域,如果全局作用域中没有定义该变量则会报错
5)在函数作用域中访问全局变量要使用window对象
6)在函数作用域中也存在声明提前。var关键字声明的变量会在函数中所有代码执行前被声明;使用函数声明方式创建的函数也会提前被声明,function fun(){};使用表达式声明的函数不会被提前声明。
7)函数内部变量没有用var ,let关键字声明的会成为全局变量,会修改全局变量的值
8)定义形参就相当于在函数内部声明了变量,但是没有赋值
************************************************************************************************************************************************************
四,函数中this上下文对象
解析器在调用函数时,每次都会向函数内部传递两个隐含参数。一个是arguments实参列表,一个是this指向的是函数执行上下文对象,this与普通的参数一样,只不过是由解析器传递进函数的。根据函数的调用方式不同,this指向不同的上下文对象。
1)以普通函数形式直接调用,this指向window
2)以方法形式调用,this指向调用该方法的对象
3)以构造函数形式调用,this指向新创建的对象(实例)
4)函数使用call()或apply()方法调用时,this指向传入的对象
************************************************************************************************************************************************************