JavaScript基础,函数,数组

数组

语法:

[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]]) 
new Array(arrayLength)
创建数组

使用数组直接量是创建数组最简单、最直观的方法,在方括号中将数组元素用逗号隔开即可。例如:

var empty = [];                 // 没有元素的空数组 
var num   = [1, 3, 5, 7, 9];    // 有 5 个数值的数组 
var mixin = ['Bob', 20, true];  // 3 种不同元素的数组

调用构造函数 Array() 是创建数组的另一种方法。

  • 调用时没有参数:
var empty = new Array();            // 没有元素的空数组 

该方式创建了一个没有任何元素的空数组,等同于数组直接量 [ ]。

  • 调用时传入一个数值参数,它指定数组的长度:
var len = new Array(5);             // 指定长度的数组

这种方式用来创建指定长度的数组。当预先知道所需元素个数时,这种方式可以用来预先分配一个数组空间。注意,数组中没有存储值,不能认为它是包含 5个值为 undefined 元素的数组。

  • 显示指定两个或多个数组元素:
var mixin = new Array('Bob', 20, true);  // 3 种不同元素的数组

构造函数的参数将会成为新数组的元素,等同于数组直接量:

var mixin = ['Bob', 20, true];  // 3 种不同元素的数组
数组长度

每个数组都有一个 length 属性,length 属性值代表数组中元素的个数

var empty = [];                     // 数组没有元素 
var letters = ['a', 'b', 'c', 'd']; // 数组有 5 个元素 
console.log(empty.length);          // 0 
console.log(letters.length);        // 5 
访问和修改数组元素

数组创建完成后,我们可以[ ] 操作符访问数组中的元素,数组的引用位于方括号左边。 方括号中是一个返回非负整数的任意表达式。使用该语法即可以访问数组中的元素,又可以修改数组中的元素。

var letters = ['a', 'b', 'c', 'd']; 
console.log(letters[0]);      // 访问索引为 0 的元素 'a' 
console.log(letters[4 - 2]);  // 访问索引为 2 的元素 'c' 
letters[1] = 1;               // 修改索引为 1 的元素 ['a', 1, 'c', 'd'] 
letters[1 + 2] = 3;           // 修改索引为 3 的元素 ['a', 1, 'c', 3]
添加和删除数组元素

添加数组元素最简单的方式是为新索引赋值:

var heroes = [];       // 创建空数组 
heroes[0] = '孙悟空';  // 然后通过索引向其中添加元素 
heroes[1] = '孙策';

也可以使用 push() 方法在数组末尾增加一个或多个元素:

var heroes = [];              // 创建空数组 
heroes.push('曹操');          // 在数组的末尾添加一个元素 ['曹操'] 
heroes.push('刘备', '孙策');  // 再添加两个元素  ['曹操', '刘备', '孙策'] 

在数组末尾压入一个元素与给数组长度索引赋值是一样的:

heroes[heroes.length] = '韩信';  // 在数组的末尾添加一个元素

也可以使用 unshift() 方法在数组的开始添加一个或多个元素,并返回新数组的长度。

var heroes = ['嬴政']; 
heroes.unshift('刘邦');         // 在数组的开始添加一个元素 ['刘邦', '嬴政'] heroes.unshift('韩信', '张良'); // 再添加两个元素 ['韩信', '张良', '刘邦', '嬴政']

说完了添加元素,我们来谈谈怎样删除元素。

改变数组的长度
var heroes = ['刘邦', '张良', '韩信', '萧何','刘备', '孙策'];
// 通过改变数组的长度删除元素 
heroes.length = 4;
console.log(heroes)  // ['刘邦', '张良', '韩信', '萧何'];

使用pop() 方法从数组的结尾弹出一个元素

var heroes = ['刘邦', '张良', '韩信', '萧何','刘备', '孙策'];
heroes.pop();   // ['刘邦', '张良', '韩信', '萧何','刘备'];

使用 shift() 从数组的开始删除一个元素

var heroes = ['刘邦', '张良', '韩信', '萧何','刘备'];
heroes.shift();   // ['张良', '韩信', '萧何','刘备'];

使用 splice() 方法删除数组中多个元素

var heroes = ['刘邦', '张良', '韩信', '萧何','刘备'];
heroes.splice(1, 2);   // ['刘邦', '萧何','刘备'];
数遍历数组

使用 for 循环遍历数组:

var heroes = ['刘邦', '张良', '韩信', '萧何','刘备']; 
var len = heroes.length; 

for (var i = 0; i < len; i++) { 
console.log(heroes[i]) 
}

使用 forEach() 方法遍历数组:

heroes.forEach(function(value, index){ 
console.log(value, index) 
})
数组方法

join():将数组的各个元素以指定的分隔符链接成一个字符串。

// 以指定的分隔符将数组元素拼接成字符串 
var heroes = ['刘邦', '张良', '韩信', '萧何','刘备']; 
console.log(heroes.join('#')); // 刘邦#张良#韩信#萧何#刘备

reverse():颠倒数组元素的顺序

var num = [1, 2, 3, 4, 5]; 
console.log(num.reverse()); // [5, 4, 3, 2, 1]

concat() 合并多个数组

var heroes1 = ['刘邦', '张良', '韩信']; 
var heroes2 = ['刘备', '张飞', '关羽']; 
var heroes3 = ['你', '我', '他']; 
var allHeroes = heroes1.concat(heroes2, heroes3); 
console.log(allHeroes); 
// 合并结果:['刘邦', '张良', '韩信', '刘备', '张飞', '关羽', '你', '我', '他']
sort() 对数组中的元素进行排序

slice(start, end):方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。

var heroes1 = ['刘邦', '张良', '韩信', '刘备', '张飞', '关羽']; 
var heroes2 = heroes1.slice(2, 5); // ['韩信', '刘备', '张飞'] 
var heroes3 = heroes1.slice(2); // ['韩信', '刘备', '张飞', '关羽'] 
var heroes4 = heroes1.slice(-4); // ['韩信', '刘备', '张飞', '关羽'] 
var heroes5 = heroes1.slice(-4, -2); // ['韩信', '刘备'] 
var heroes6 = heroes1.slice(-4, 3); // ['韩信'] 
console.log(heroes2); 
console.log(heroes3); 
console.log(heroes4); 
console.log(heroes5); 
console.log(heroes6);
splice(start, [deleteCount, [item1, item2, …]])

只传入一个参数 strat,从start位置开始截取,直到数组结尾

var heroes1 = ['刘邦', '张良', '韩信', '刘备', '张飞', '关羽'];
var heroes2 = heroes1.splice(2); console.log(heroes1); // ['刘邦', '张良'] console.log(heroes2); // ['韩信', '刘备', '张飞', '关羽']

传入 startdeletCount,从 start 位置开始截取,截取 deleteCount个元素。

var heroes3 = heroes1.splice(2, 3, '你', '我', '他'); 
console.log(heroes1); // ['刘邦', '张良', '你', '我', '他', '关羽']; console.log(heroes3); // ['韩信', '刘备', '张飞']

如果 deleteCount 为 0 ,则表示只插入新元素不删除原有的元素。

var heroes4 = heroes1.splice(2, 0, '你', '我', '他'); 
console.log(heroes1); 
// ['刘邦', '张良', '你', '我', '他', '韩信', '刘备', '张飞', '关羽'] console.log(heroes4); // []

函数

函数其实就是封装,把可以重复使用的代码放到函数中,如果需要多次使用同一段代码,就可以把封装成一个函数。这样的话,在你需要再次写这些代码的时候,你只需要调用一次函数就行了。

定义函数的方式
  1. 使用字面量的形式定义函数

ECMAScript中的函数使用function关键字来声明,后面跟一组参数及函数体。函数的基本语法如下:
声明函数的基本语法
以下是一个函数的示例:

function sum(num1, num2) {

		var num3 = num1 + num2;
		return num3;

}

这个函数的作用是把两个值加起来返回一个结果。函数必须通过调用才会执行,调用这个函数的代码如下:

var result = sum(5, 10);  //15
  1. 使用函数表达式声明函数
    使用函数表达式声明函数

  2. 使用Function构造函数声明函数
    使用Function构造函数声明函数

函数的返回值

下面这个函数在执行完return语句之后停止并立即退出。因此,位于return语句后面的任何代码永远都不会执行。例如:

function sum(num1, num2) {

		var num3 = num1 + num2;
		return num3;

      alert("hello world");  //永远不会执行

}

一个函数中可以有多个return语句,如下面的这个例子所示:

function max(num1, num2) {
	  if(num1 > num2){
		return num1;
    }else{
		return num2;
}
}

max()方法的作用是求两个数中最大值的。如果第一个数比第二个数大,返回第一个数;否则返回第二个数。代码中的两个分支都具有自己的return语句,分别用于返回最大值。

另外,return语句也可以不带任何返回值。在这种情况下,函数在停止执行后将返回undefined。这种方法一般用在需要提前停止函数执行而又不需要返回值的情况。

function max(num1, num2) {

			if(!(num1 && num2)){  //参数只要有一个为空,函数就什么也不做,直接返回

				return;

			}else if(num1 > num2){

				return num1;

		    }else{

				return num2;

		    }

		}
函数的参数

ECMAScript函数不介意传递进来多少参数,也不在乎传进来的参数是什么数据类型。也就是说,即便你定义的函数只接收2个参数,在调用这个函数的时候也未必一定要传递2个参数。可以传递1个、3个甚至不传递参数,而解析器永远不会有什么怨言。

实际上,传递给函数的所有参数都被保存到了arguments对象中,arguments对象位于函数体内,与数组有点类似(但它并不是Array的实例),参数都被保存到了这个数组中。

有的人可能会问了,既然所有传递进来的参数都被保存到arguments数组中了,那么在声明函数的时候还声明参数干什么?

其实声明形参只是为了方便在函数体中引用传递进来的实参,但这不是必需的,在声明函数时也可以不声明形参。

函数的参数

函数声明提升

函数声明提升

等价于

函数声明提升

都会打印出undefined

函数声明提升

函数的作用域

变量的作用域范围可分为全局变量和局部变量

  • 全局变量:

在最外层声明的变量叫全局变量
在函数体内部,没有使用var关键字声明的变量也是全局变量

  • 局部变量:

在函数体内部,使用var关键字声明的变量叫作局部变量。

自执行函数

先前咱们写的函数只有在调动的时候才会执行,如果像下面这样写的话,代码执行到这一行的时候,函数会自己执行(或者说自己调用自己)。

(function sum(a){

        		console.log(a);

})("abc")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值