1数组
1.1数组定义
JS中定义数组的三种方式如下(也可先声明再赋值);
1.var arr = [值1,值2,值3];//隐式创建
var arr2=[1,2,'a',4];
console.log(arr2);
2.var arr=new Array(值1,值2,值3);//直接实例化
var arr3=new Array(1,2,3);
console.log(arr3);
3.var arr=new Array(size); //创建数组并指定任意长度
var arr4=new Array(4);
console.log(arr4);
1.2数组的基本操作
1.数组的下标从0开始
获取数组指定下标的值:数组名[下标];
console.log(arr2[1]);
如果下标不存在,则会显示undefinded
2.设置数组的值:数组名[下标]=值;
arr2[1]=10;
console.log(arr2[1]);
如果下标不存在,则自动扩容
arr2[10]=8;
console.log(arr2);
显示Array(11) [ 1, 10, "a", 4, <6 empty slots>, … ]
3.获取数组的长度:数组名.length;
console.log(arr3.length); // 3
4.设置数组的长度:数组名.length=值;
arr3.length=5;
console.log(arr3.length); // 5
5.设置数组的属性
如果设置非整数的下标,则会成为数组的属性,不计入数组的长度。
设置属性:数组名.属性名=值;
数组名[“属性名”]=值;
获取属性:数组名.属性名;
数组名[“属性名”];
arr3.name="zhangsan";
console.log(arr3);
arr3["pwd"]="123456";
console.log(arr3);
6.获取数组的属性
console.log(arr3["name"]); //zhangsan
1.3数组的遍历
JS
提供三种遍历数组的方式:
1.3.1.for循环遍历
不遍历属性
for(var i=0;i<数组长度;i++)
{
}
1.3.2.for...in循环
不遍历索引中的undefined
for(var 下标名 in数组)
{
}
1.3.3.forEach循环
不遍历属性和索引中的undefined
数组.forEach(funiction(element,index)
{
//element:元素
//index:下标
})
1.4数组提供的方法
常用的:
1.4.1.push
添加元素到最后
arr.push(2);
1.4.2.indexof
数组元素索引,如果找不到元素返回-1.
arr.indexof(2);
1.4.3.join
数组转成字符串
arr.join();
arr.join(",")//元素之间以逗号隔开
1.4.4.split
字符串方法:将字符串转换成数组
arr.split(",")//元素之间以逗号隔开
不常用的:
unshift:添加元素到最前
pop:删除最后一项
shift:删除第一项
reverse:数组翻转
slice:截取(切片)数组,原数组不发生变化
splice:剪接数组,原数组变化,可以实现前后删除效果
concat:数组合并
2.函数
2.1函数的定义
有三种函数定义的方式:函数声明语句,函数定义表达式,Function构造函数
2.1.1函数声明语句
function 函数名([参数列表])
{
}
例:function foo()
{
console.log(1);
}
foo();
该种方式的定义函数具有声明提升的效果
foo();
function foo()
{
console.log(1);
}
变量声明提升
console.log(a);
var a=2;
2.1.2.函数定义表达式
var 变量名/函数名=function(参数列表)
{
}
例:var fn01=function(a,b)
{
console.log(a+b);
}
2.1.3.Function构造函数
var 函数名=new Function(参数列表,函数体);
var 函数名=new Function('a','b','return (a+b)');
2.2函数的参数
2.2.1.实参可以省略,则形参为undefined
fno1(); // NaN
fno2(1); // NaN
fno2(1,2); // 3
2.2.2.如果形参名相同,则以最后一个参数为准。
function test(x,x)
{
console.log(x);
}
test(1,2); // 2
2.2.3.可以设置参数的默认值
第一种:function test03(x)
{
如果形参x有值,则值为x传递的值,否则值为“x“
x=x||"x"
console.log(x);
}
test03(10); // 10
test(); // x
第二种:function test04(x)
{
(x!=null&&x!=undefined)?x=x:x="x";
console.log(x);
}
test04(); // x
test04(hello); // hello
2.2.4.参数为值,传递副本;参数是引用传递,则传递的是地址,操作的是同一个对象。
var num=10;
function test05(num)
{
num=20;
}
test05(num);
console.log(num); // 10
var obj=(name:"zhangsan");
console.log(obj);
function test06(o)
{
o.name="lisi";
}
test06(obj);
console.log(obj); // (name:"lisi");
2.3函数的调用
2.3.1.常用调用模式
函数名(参数);
function fn01(x)
{
console.log(x)
}
fn01(“冬奥加油”);// 冬奥加油
2.3.2.函数调用方式(函数有返回值)
var 变量名 =函数名(参数列表);
var f2=function(a)
{
console.log(a);
return a;
}
var num1=f2(1);
console.log(num1); // 1
2.3.3.方法调用模式
对象.函数名(参数列表);
var obj={
name:"zhangsan",
age:18,
sex:true,
cats:["大毛","二毛"],
dog:{
name:"张二狗",
age:1
},
sayhello:function()
{
console.log(”你好呀“);
}}
console.log(obj);
obj.sayhello(); //对象调用函数
2.4.return
2.4.1.在没有返回值的方法中,用来结束方法
function a1()
{
console.log("122456");
return;
console.log("222256");
}
console.log(a1); //d第二个不会出现
2.4.2.有返回值的方法中,一个用来结束方法,一个将值带给调用者
function a2()
{
console.log("有返回值");
return "test";
}
console.log(a2); // 有返回值 test
2.5函数的作用域
在JS中,只有在函数中才有作用域。
2.5.1.在函数中,存在局部变量和全局变量
2.5.2.在函数中,如果声明变量时为使用var修饰符,则该变量时全局变量
var pp="hello";//全局变量
function qq()
{
var box1=10;//局部变量
box2=20;//全局变量
}
qq();
console.log(pp);
console.log(box1); //会报错因为是局部变量
console.log(box2);//先调用函数才能显示这个变量