1,数组
数组是按次序排列的一组数据,每个值的位置都有编号(从0开始),整个数组用方括号表示。
1.1数组的定义
JS 中定义数组的三种方式如下(也可先声明再赋值):
var arr = [值1,值2,值3]; // 隐式创建
var arr = new Array(值1,值2,值3); // 直接实例化
var arr = new Array(size); // 创建数组并指定长度
1.2基本操作
1. 数组的长度可以通过length属性获取,长度可以任意修改
获取长度:数组.length
设置长度:数组.length = 新长度
2. 获取数组中元素通过索引获取,索引可以越界
获取元素:数组[下标]
设置元素:数组[下标] = 值
1.3数组的遍历
1. 普通的for循环遍历
for(var i=0; i<=数组.length-1; i++){
}
2. for...in..
for(var 下标(名称任意) in 数组名){
数组名[下标]是获取元素
} // 下标(名称任意)
3. forEach
数组名.forEach(function(element,index){
element表示当前元素
index表示索引
}
1.4 数组方法
push 添加元素到最后
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
join 数组转成字符串
indexOf 数组元素索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并
1.5了解内容
了解内容:
如果下标:
1.为非负整数(包括整数字符串):自动从0开始,不存在添加 undefined
2.为负数、小数、非数字符串:这些内容不计算在长度内,当成"属性"处理,相当于自定义属性。
数组非常灵活,使用数组元素
1.下标: 非负整数(包括整数字符串):
数组.下标
数组[下标]
2.下标:负数、小数、非数字字符串:
数组[属性]
* for ——> 不遍历属性
* foreach ——>不遍历属性和索引中的undefined
* for in ——>不遍历索引中的undefined
2,函数
函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值。函数也是对象。
2.1函数的定义
有三种函数定义的方式:函数声明语句、函数定义表达式、Function构造函数
1. 函数声明语句
function 函数名([参数列表]) {
}
2. 函数定义表达式
var 变量名 = function([参数列表]) {
}
3. Function构造函数
var 变量名 = new Function('a','b','return (a+b)');
注:
1.如果使用函数声明语句这种方式声明函数,会具有函数名提升的效果。
2.JS中方法没有重载,如果出现同名方法则覆盖。
2.2参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数,定义时的参 数称为形参,调用时的参数称为实参 。
- 实参可以省略,那么对应形参为undefined
- 若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
- 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
- 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。
// 实参可以省略,那么对应形参为undefined
function fn(str) {
console.log(str); // undefined
}
fn();
// 若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
function fn2(a,a) {
console.log(a);
}
fn2(1,2);
// 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
function fn3(a) {
a = a || "a";
return a;
}
var a1 = fn3();
console.log(a1);
var a2 = fn3(100);
console.log(a2);
// 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。
// 值传递
var n = 10;
function fn4(num) {
num = 20;
}
fn4(n);
console.log(n);
// 引用传递
var obj = {
uname:"zhangsan",
upwd:"123456"
};
function fn5(o){
o.uname = "lisi"; // 修改对象中的属性值
}
fn5(obj);
console.log(obj);
2.3函数的调用
1. 常用调用方式:
函数名([参数列表]);
2. 函数调用模式:
function add(a,b) {
return a+b;
}
var sum = add(10,20);
console.log(sum);
3. 对象调用模式:
var ob = {
name:"zs",
age:18,
sex:true,
test:function(){
console.log("对象调用对象...");
}
};
ob.test();
2.4return
函数的执行可能会有返回值,需要使用return语句将结果返回。return 语句不是必需的,如果没有的话,该函数就不 返回任何值,或者说返回 undefined。
作用: 1. 在没有返回值的方法中,用来结束方法。
2. 有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。
2.5函数的作用域
函数作用域:全局 (global variable) 和 局部 (local variable)
1. 全局变量与局部变量同名问题
var box =1; // 全局变量
function display(box){
var box = 3; // 此处box与全局变量box没有关系,这里的box为传递的参数,相当于新声明的局部变量
var b = 2; // 局部变量
console.log("box-->" + box);
}
display();
// b 不能访问
console.log("b-->" + b);
2. 在函数中定义变量时,若没有加var关键字,使用之后自动变为全局变量
function fun(){
a = 100;
}
fun();
alert(a);