函数
-
什么是函数?
- function,也叫 方法(method)或过程procedure。是一段 预定义 好的,并且可以被 反复执行的 代码块;
- 预定义:提前声明好,不是马上使用。
- 反复执行:可以被循环利用。
- 代码块:允许包含多条可执行语句。
- 函数本身不运行,必须调用才能运行。调用 函数名();
-
函数的参数
-
在函数体内,可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
-
function add(num1,num2){ arguments[1]=10; console.log(num2) // 10 因为被arguments重写了 console.log(arguments[0]+num2) // 20 } add(10,30) 复制代码
-
-
-
函数没有重载
- 即函数如被重复定义,只会以最后定义的为准。
变量、作用域、内存
-
基本类型值:指的是简单的数据段。
-
引用类型值:指那些可能由多个值构成的对象。
-
使用var 声明的变量会自动添加到最接近的环境中;如在函数中使用var定义,则该变量为该函数的
-
基本类型 Undefined Null Boolean Number String 是按值访问 引用类型 的值是保存在内存中的对象,不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间。 在操作对象时,实际上是操作对象的引用而不是实际的对象。所以引用类型的值是按引用访问的。 复制代码
-
复制变量值,基本类型值和引用类型值也不相同
-
一个变量向另一个变量复制基本类型值,会在变量对象上创建一个新值,后续操作两个变量不会互相影响到各自;
-
一个变量向另一个变量复制引用类型值,改变其中一个,另一个随之改变;因为对象保存在堆内存中,两个变量引用的都是同一个对象。复制后得变量的值的副本实际上是一个指针。
-
-
传递参数:参数实际上是函数的局部变量,参数只能按值传递
function setName(obj){ obj.name="asd"; // 在函数内部修改了参数的值,原始的引用保持不变 obj={}; obj.name="1223"; // 当在 函数内重写obj时,这个变量引用的就是一个局部对象,局部对象会在函数执行完后立即被销毁,所以函数外再访问对象时,还是参数之前的引用值。 } var obj2={}; setName(obj2) console.log(obj2.name)// asd 复制代码
-
检测数据类型
-
typeof 可以检测基本数据类型 中的 undefined string boolean number 的最佳工具,对对象或者Null 都会检测为object;
-
instanceof 检测引用类型的值
-
var obj3 = {}; console.log(obj3 instanceof Object) // true console.log(obj3 instanceof Array) // false console.log(obj3 instanceof RegExp) // false console.log(obj3 instanceof Function) // false 复制代码
-
-
引用类型
-
Object 类型
- 创建Object 实例有两种方式
- 使用new 操作符后跟Obejct 构造函数;var obj = new Obejct();
- 使用对象字面量表示法;向函数传递大量可选参数的首选 var obj = {};
- 访问对象属性时的方式
- 点表示法;obj.name
- 方括号语法;优点是可以通过变量俩访问属性;obj[name]
- 创建Object 实例有两种方式
-
Array 类型 :可随着数据的添加自动增长以容纳新增数据
-
创建数组有两种方式
- var arr = new Array();
- var arr = [];
-
数组的下标索引从0开始 到arr.length-1 结束;
-
如果数组中,当前索引下标没有定义数据,则新增的每一项都会取得undefind值;
-
数组最多可以包含 4 294 967 295个项
-
检测数组
- Array.isArray(); ie9+/firefox 4+/
-
数组转字符串
- arr.join(); 接收一个参数,即用作分隔符的字符串;
-
栈方法 会改变数组
- 栈是后进先出的数据结构
- 栈的插入和移除,都发生在栈的顶部
- push() 插入
- pop() 移除
-
队列方法
-
是先进新出
-
shift(); 移除
-
unshift(); 推入
-
var co = []; co.unshift('asd', 'asdasd') console.log(co) //[ 'asd', 'asdasd' ] var x = co.shift(); console.log(typeof x) // string console.log(co) // ['asdasd'] 复制代码
-
-
-
重排序方法
-
reverse() 翻转
-
sort()
-
按升序排列,最小的值位于最前面,会调用数组的toString()方法,然后比较字符串,来确定如何排序。
-
可以接受一个比较函数作为参数,比较函数接受两个参数。通过两个比较函数的参数来判断大小。
-
var arr=['2',1,'12',13,9] arr.sort(function(a,b){ // return a-b; 升序 return b-a; // 降序 }) // console.log(arr) //return a-b; [ 1, '2', 9, '12', 13 ] console.log(arr) //return b-a; [ 13, '12', 9, '2', 1 ] 复制代码
-
-
-
-
操作方法
- concat() 不会改变原数组,会在数组后追加当前新增数据
- slice() 不会改变原数组 基于当前数组中的一个或多个项来创建新数组;
- 1个参数时;返回从参数指定位置开始到当前数组结尾的所有项;
- 2个参数时;返回起始和结束位置之前的项,不包括结束位置的项 含头不含尾
- splice() 改变原数组 始终返回一个数组
- 删除:2个参数时;要删除的第一项的位置和要删除的数量;
- 插入:3个参数时;起始位置,0 要删除的项数,要插入的项;
- 替换:向指定位置插入任意数量的项,且同时删除任意数量的项;splice(2,1,'red','g')
-
位置方法 查找项必须严格相等 ===; 返回该项在数组中的索引位置;
- indexOf()
- lastIndexOf()
-
迭代方法 都会对数组中的每一项运行给定的函数;都不会改变原数组
- every() 如果该函数对每一项都返回true,则返回true; 一假为假
- filter() 返回该函数会返回true的项组成的数组;
- forEach() 没有返回值;
- map() 返回每次函数调用的结果组成的数组
- some() 如果该函数对任意一项返回true,则返回true; 一真为真
-