作用域:
一个变量可以使用的范围:只有函数生成私有作用域
全局作用域:当页面打开的时候就会生成
私有作用域:每一个函数都是一个私有作用域
当出现了私有作用域,就会分为上下级的情况
变量使用的范围:
一个变量只能在自己作用域的内部使用,上级作用域不能使用,自己的下级作用域可以使用,访问规则为:私有作用域没有变量
的情况下会查找上一级,直达查找到变量名,则取消查找
变量的赋值规则:当给变量赋值时,是在哪一个作用域里面的变量赋值:
先在自己作用域查找,如果有则赋值,如果没有则上一级作用域里面查找,直达找到为止,如果全局作用域都没有的话,则定义为全局变量,在赋值。
对象:复杂数据类型:
是一个对象空间可以存储任意类型的数据,
语法“var obj={name:'jack" age:18}
操作对象:
1.点语法:
添加成员:obj.name='jack',向obj对象内,添加一个name成员名内容为jack
删除对象成员:delete obj.name,删除obj里面的name成员
修改某一个对象成员:obj.age=20,重复赋值,如果对象内有这个成员则为修改,没有则为添加
查询对象:obj.name
2.数组关联语法:
添加:obj['age']=20,
数据在内存中的存储形式:
1.栈内存:基本数据类型
2.堆内存:复杂数据类型,只有地址在栈里面
变量的赋值关系:
复杂数据类型,obj=obj1,两个对象存储的地址是一样的,改变obj1的内容时,obj内的内容也会随之改变.
数据类型之间的比较:
基本数据类型时值之间的比较,复杂数据类型比较的是地址之间的比较
数组:是一个数据类型的集合,可以放任意类型的数据
数组的定义方式:
1.字面量方式定义数组:var arr=[],定义了一个空数组
2.内置构造函数定义一个数组:var arr=new Array(),制造一个空数组
定义一个有限长度数组:var arr=new Arry(10),制造一个长度为十的空数组
传递多个数据:var arr=new Arry(1,2,3,4),定义多个参数,则代表往数组中添加了多个数据
数组的基本使用:
数组自带属性,length,代表数组中有多少数据
获取数组中的基本数据:数组名称+[索引]
数组的操作:
push()向数组中添加数据,添加位置为最后;语法:数组名.push(添加的数据);返回值:添加过后的数据长度
pop()删除数组中的最后一个数据,语法:数组.pop()不需要参数;返回值:被删除的那一个数据
unshift()像数组中添加数据;语法:数组.unshift(需要添加数据) ,位置添加在数组的最前面,返回值,改变后数组的长度,与push()内存的消耗不一样
shift()删除数组中的第一个数据,语法:数组.shift(),返回值,被删除的那个数据
concat()对数组进行拼接,理论上可以无限添加数组,语法:数组.concat([数组]),返回值拼接后的数组
splice()对数组进行截取,语法:数组.splice(开始的索引位置,截取多少个),直接改变原始数组,不管截取多少个内容都是以数组返回,不传递第二个参数时,返回值为索引后所有值,添加数组新成员,从第三个开始替换后谜案的元素
reverse()反转数组,语法:数组.reverse(),返回值:反转后的数组
sort()数组排序,1.语法:数组.sort(),返回值排序好的数组,排序方式是按照一位一位来排序
2.按照数字大小来排序:数组.sort(function(a,b)){return a-b(b-a)}升序(降序)排列
join()把数组连接成字符串,语法:数组.join('连接字符')
slice()截取数组,语法:数组.slice(开始的索引,结束的索引),不改变原始数组,包前不包后,以数组的形式返回结果