JavaScript
函数
参数
- arguments.length 实参长度,也就是实际传入的参数长度
- fn.length 形参长度,函数定义参数数量
- if(arguments.callee.length<arguments.length) 形参长度小于实参长度
清除函数
-
fn=null;
-
delete window.fn;无效
- delete 不能删除任何window下的函数方法
return
-
函数返回
- 函数在执行时,将返回函数中return 内容
- 如果return后没有内容或者没有return,返回一个undefined
-
作用
-
返回局部变量
-
返回参数
- 改变非引用值时不会引起外部的改变,需要用return
- 改变引用值(对象)会引起外面的改变,return作用不大
-
跳出,切断,不继续执行
-
函数的运行过程
- 代码上到下,遇到函数执行完函数继续向下
- return 只跳出当前自己的函数
- 函数执行中执行其他函数,另一个函数中的内容执行完成后才会继续执行当前函数
- 当需要并列执行多个时,我们可以在一个函数中统一调配执行的顺序
回调
-
定义
- 将一个函数以参数的形式传入到另一个函数中,并且在那个函数执行
-
使用场景
- 回调一般用于当处理事情需要等待时,设置回调
- 当不需要关心具体后续需要处理的事情时,设置回调
-
setTimeout()、clearTimeout()
-
setTimeout(超时执行的函数,超时时间,执行函数的参数)
- 返回一个ID数
- 异步、一定时间段后处理
-
clearTimeout(id) 清除这个超时函数,用于超时函数使用完后
-
-
setInterval()、clearInterval()
- setInterval(间隔执行的函数,间隔时间)间隔函数,间隔一定时间重复执行函数
- clearInterval 清除间隔函数
-
回调函数完成循环,局部传参返回值,注意逐层返回跳出函数
递归
-
定义
- 函数内部执行当前自身函数
-
根据内存大小设置递归上限的次数,如果递归次数太多,就会堆栈上限溢出
-
实例:递归实现深拷贝
数组
基本概念
-
有序列表存储若干个无序的元素,紧密型结构
-
将元素放在列表中的第几位,从0开始计算,这个位置就是下标,又叫做索引值
-
元素被存储在列表中,这个数据就是元素,简称元
-
从列表中获取这个元素的方法,使用 数组名[下标]就可以得到这个元素,这种方式叫做下标变量
-
var arr=[]; arr[3]=20;
- arr[3] 下标变量 3就是下标 20就是元素 arr就是数组
数组与对象
-
数组
-
紧密型结构
-
当删除一个元素会将后面的元素向前递进
-
可以根据上一个内容找到与其相关联的其他数据
- 例如:可任意利用数组排序,找一个最小值,还可以迅速找到第二位最小值
-
-
只用下标存储对应的值
- 如果需要查找一个值,就需要遍历数组的每个元素以达到找到目标元素,时间复杂度极高
-
数组是有长度
-
数组中可以知道存储了多少元素
- 插入和删除都会影响数组的元素的位置和结构
- 插入和删除都会影响数组的运行效率时间复杂度较高
-
-
对象
-
松散型结构
- 当删除一个元素时,对象的其他值不会发生变化
- 每个数据都是独立存在,不存在关联关系,更不能排序,,所以不找因关联关系找到对应的值
-
对象是键值对存储
- 通过key去一一对应存储一个值,获取时只需要根据key去取值就可以,时间复杂度极低
-
对象是没有元素的个数,也就是没有对象长度
-
对象中不知道存储了多少个元素
- 插入和删除不会影响其他数据,时间复杂度极低
-
-
判断对象中,这个key对应的值,是否存在。在数组中,下标就相当于对象中的key,可以判断它的对象值是否存在
创建数组
-
字面量创建数组
- var arr=[]; 创建空数组
-
构造函数创建法
- new Array();
- new Array(size);
- 如果构造函数创建数组时,仅有一个参数且参数是一个大于0 的正整数,那么这个数就是这个新数组的长度,并且没有元素,如果是负数或者小数,就会报错,如果是非数值类型,就会将这个元素放在数组的第0位
-
对象创建法
-
var arr=new Object([])
-
区分数组和对象
- arr.constructor==Array arr的构造函数是Array
- Array.isArray(arr) 是不是数组(仅限ES6以后支持)
- 数组转字符串后判断是不是不等于[object object]
console.log(String(arr)!=="[object Object]");
-
-
js是弱类型语言,数组比较随意,因此可以任意扩张,不需要限定它的长度,也无法限定长度
数组与其他类型
-
数组也是引用类型,引用地址赋值
-
数组在强转或者隐式转换为字符串时,都会转换为数组的元素连接字符串值
-
false
- console.log([]===[]);
- console.log([]==[]);
- console.log(![]);
- console.log([]==undefined);
- console.log([]==null);
-
true
- console.log(![]==[]);
- console.log([]=="");
- console.log([]==false);
- console.log([]==0);
数组长度
-
数组中元素的个数
-
数组的长度是一个可读可写的属性
-
如果数组的长度修改比原来的长度小,就会把对应多出来的元素删除
-
数组的长度比数组的最大下标值大一
-
常见语句
- arr.length-- 删除最尾部的一个元素
- arr.length==0 清空数组中所有元素
- arr.length ++ 在数组尾部添加一个空元素
- arr.[ arr.length]=5 在数组的尾部增加一个元素5
- arr[10]=100; 如果数组下标大于数组长度时,就会在对应的下标位增加元素,中间增加空元素
遍历数组
- 数组使用for循环遍历,会将所有下标遍历,不遍历数组的对象属性 但是会遍历到空元素,遍历时下标都是数值
- 数组使用for in循环遍历,会将所有的可枚举属性遍历,如果该属性 没有值就不遍历,例如数组中下标为空元素的,就不会被遍历,但是数组的对象属性会被遍历,遍历时都是将下标转换为字符串
XMind: ZEN - Trial Version