比较运算符:
“==”———————— 比较值
1==“1” true
“===”————————比较值与类型
1==='1' false
数组:(在这个里面可随意扩容)
数组的定义
1.隐式定义
var数组名=[];//空数组
var数组名=[值1,值2,值3.。。];
// 隐式定义
var arr1 = [];
console.log(arr1);
var arr2 = [1,2,'a',true];//(建议同类型)
console.log(arr2);
2.直接实例化
var数组名=new Array();
var数组名=new Array(值1,值2,值3...);
//直接实例化
var arr3 = new Array(1,2,3);
console.log(arr3);
3.定义数组并设置长度
var 数组名=new Array(size);
//定义数组并设置长度
var arr4 = new Array(5);
console.log(arr4);
数组的操作:
数组的下标从0开始,不会出现下标越界
获取数组的值,如果下标不存在,则undefined:
数组名[下标]
// 获取指定下标的值
console.log(arr2[1]);
//设置如果下标不存在
console.log(arr2[10]);//undefined
设置数组的值:如果下标不存在,则自动扩容
数组名[下标] = 值;
// 设置指定下标的值
arr2[1] = 20;
console.log(arr2[1]);
// 如果下标不存在
arr2[10] = 100;
console.log(arr2);//这里体现了自动扩容
获取数组的长度
数组名.length;
//获取数组的长度
console.log(arr3.length);//3
设置数组的长度
数组名.length = 值;
// 设置数组的长度
arr3.length = 5;
console.log(arr3);
了解:
如果设置非整数型的下标,则会成为数组的属性,不计入数组的长度
设置属性:
数组名.属性名 = 值;
数组名称['属性名'] = 值;
// 设置数组的属性(不占长度)
arr3[name] = 'zhangsan';//使用arr3.name会显示name 使用arr3[name]会显示“ ”
console.log(arr3);
arr3['pwd'] = '123456';
console.log(arr3);
获取属性:
数组名.属性名;
数组名['属性名'];
// 获取数组的属性
console.log(arr3[name]);//必须与设置name时的格式相同,否则会显示undefined
数组的遍历
1.for循环遍历 不遍历属性
for(var index = 0;index<数组长度; index++){
}
// 数组的遍历
console.log(arr3);
2.for...in循环 不遍历索引中的undefined
for(var下标名 下标名 in数组){
}
// for循环遍历
console.log('---for---');
for(var i = 0; i<arr3.length; i++){//注意有length
console.log('下标'+i+',值:'+arr3[i]);//体现了属性可以使数组的length增加,但不会被遍历的特性
}
3.forEach循环 不遍历属性和索引中的undefined
数组.forEach(function(element,index)){
//element:元素
//index:下标
}
// forEach 针对数组的
console.log('---forEach---');
arr3.forEach(function(element,index){
console.log('下标'+index+',值:'+element);
})
数组提供的方法
push 添加元素到最后
indexOf 数组元素索引
join 数组转换成字符串
split 字符串方法,将字符串转换成数组
以上为常用
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
slice 截取(切片)数组,原数组不发生变化
splice 剪切数组,原数组变化,可以实现前后删除效果
concat 数组合并
// 数组提供的方法
var arr5 = ['a','b','c'];
//push 添加元素到最后
arr5[arr5.length] = 'd'
arr5.push('e');
console.log(arr5);
//indexOf 数组元素索引
console.log(arr5.indexOf('a'));
console.log(arr5.indexOf('t'));//找不到返回-1
//join 数组转换成字符串
console.log(arr5.join(','));
console.log(arr5.join('-'));
//split 字符串方法,将字符串转换成数组
var str = '1,2,3,4,5';
console.log(str.split(','));
console.log(str.split('-'));
函数的定义
1.函数声明语句
function 函数名([参数列表]){
}
// 函数的定义
// 函数声明语句
function fn01(a,b){
console.log(a+b);
}
console.log(fn01);
2.函数定义表达式
var变量名/函数名 = function([参数列表]){
}
// 函数定义表达式
var fn02 = function(a,b){
cconsole.log(a+b);
}
console.log(fn02);
3.Function构造函数
var 函数 = new Function([参数列表],返回值);
// Function构造函数
var fn03 = new Function('a','b','return (a+b);');
console.log(fn03);
// 相当于
function fn04(a,b){
return a+b;
}
函数的参数
定义函数时设置形参,调用函数时传递实参。
1.实参可以省略,则形参为undefined
// 未设置实参
test01();// NaN
test01(1);//NaN
test01(1,2);//3
2.如果形参名同名,则以最后一个为准
//2.如果形参名同名,则以最后一个为准
function test02(x,x){
console.log(x);
}
test02(1,2);//2
3.可以设置参数的默认值。
//3.可以设置参数的默认值
function test03(x){
//如果形参x有值,则值为x传递的值,否则值为‘x’
x=x||'x'
console.log(x);
}
test03(10);//10
test03();//x
function test04(x){
(x !=null && x!=undefined) ? x = x:x = 'x';//三步运算符
console.log(x);
}
test04();//x
test04('hello');//hello
4.参数为值传递,传递副本;参数是引用传递,则传递的是地址,操作的是同一对象
函数调用
var num = 10;//值传递,不影响num的初始值
function test05(num){
num=5
}
test05(num);//实参是定义的变量
console.log(num);
//引用传递
var obj = {name:'张三'};
console.log(obj);
function test06(o){
o.name = 'lisi';
}
test06(obj);
console.log(obj);
1.常用调用方式
函数名([参数列表]);
// 常用调用模式
function f1(){
console.log('常用调用模式')
}
f1();
2.函数调用模式
var 变量名 = 函数名([参数列表]);
// 函数调用模式
var f2 = function(a){
console.log('函数调用模式')
return a;
}
var num1 = f2(1);
console.log(num1);
3.方法调用模式
对象.函数名([参数列表]);
//方法调用模式
//定义对象 key键: 字符串 value值:任意数据类型
var obj = {
name:'zhangsan',//字符串
age:18,//数值
sex:true,//布尔
cats:['大毛','二毛'],//数组
dog:{//对象
name:'张二狗',
age:1,
},
sayHello:function(){//函数
console.log('你好啊');
}
}
console.log(obj);
console.log(obj.sayHello);
console.log(obj.sayHello());//对象调用函数,加括号表示调用,在控制台打印时,函数无返回值会显示undefined
obj.sayHello();//对象调用函数
console.log('==========');
函数的返回值
return
1.在没有返回值的方法中,用来结束方法。(如果方法没有返回值,使用return,返回的是undefined)
//函数的返回值
function a1(){
console.log('没有返回值');
return;//表示方法结束
console.log('............')
}
console.log(a1());
2.有返回值的方法中,一个是用来结束方法,一个用来用来将值带给调用者。
函数的作用域
console.log(a1());
function a2(){
console.log('有返回值');
return 'test';//返回之后方法结束
}
在js中,只有在函数中才有作用域
1、函数中.存在局部变量和全局变量
2.在函数中,如果声明变量时,未使用var修饰符,则为全局变量
//函数的作用域
var pp ='hello';//全局变量
//函数中定义的变量是局部变量
function qq(){
//局部变量
var box = 10;
//全局变量
box2 = 20;
}//调用方法,执行方法中的代码
qq();
console.log(pp);
// console.log(box);box是局部变量,无法打印
console.log(box2);