- 对象属性名为变量时,不能用".",要用"[ ]",但是不能加双引号;
- 基本数据类型是对键值对的引用,引用数据类型是对地址的引用;
- 基本数据类型,对值的引用:
var a=123; var b=a; b+=3; console.log(a); console.log(b);*/ //打印出来的值中,a为123;b为126; - 引用数据类型,是对地址的引用:
var a=[1,2,3,4] var b=a; b[4]=5; console.log(a); console.log(b); //打印出来的a为[1,2,3,4,5],b也为[1,2,3,4,5], // b引用的地址与a的地址为同一个地址,当改变b中的元素时,a也会改变; - 普通对象的遍历:for-in
var a={ name:"guobin",age:26,sex:"男"}; var b={}; for( var attr in a){ b[attr]=a[attr];//对象的克隆; } b.insert="meihao";//给b添加自定义属性; console.log(a); console.log(b); //打印出来的结果:a={name: "guobin", age: 26, sex: "男"}; //b={name: "guobin", age: 26, sex: "男", insert: "meihao"};
- 基本数据类型,对值的引用:
- 数组常用的方法:
- 学习思路,需要关注4点:
- 方法的作用;
- 是否需要参数;
- 是否有返回值,返回值内容;
- 原来数组是否改变;
- 第一组:数组元素的增加,删除,替换——原来数组会发生变化;
- push()
- 作用:给数组末尾增加一项;
- 参数:需要实参,为增加项的内容;内容为元素,不是数组;
- 返回值:新数组的长度;
- 原来数组发生改变;
- pop()
- 作用:删除数组最后一项;
- 参数:不需要;
- 返回值:删除项的内容;
- 原来数组发生改变;
- unshift()
- 作用:给数组开头添加一项;
- 参数:需要实参,为增加项的内容;内容为元素,不是数组;
- 返回值:新数组的长度;
- 原来数组发生改变;
- shift()
- 作用:删除数组第一项;
- 参数:不需要;
- 返回值:删除项的内容;
- 原来数组发生改变;
- splice():删除,插入,替换
- 语法:splice(index,deleteCount,替换的内容);
- index:从数组中开始的索引值;(若参数中只添加index值,则从index值开始,后面的元素全部删除)
- deleteCount: 删除元素的个数;(不可省略,若省略则为添加的内容不能插入,除了只有index的情况)
- 替换的内容:可省略,即无添加内容;
- 返回值:删除的元素重新构成的数组;若没有删除内容,则返回空数组;
- 原来的数组会发生变化;
- 三种形式代码:
- 插入:arr.splice(2,0,"neirong");//删除个数不能省略,省略后,插入失效,在制定位置的插入;
- 删除:arr.splice(2,3);//当删除个数省略时,从2开始,删除3个后面的元素;
- 替换:arr.splice(2,2,"neirong1","neirong2");//替换的个数与删除的个数可以不相等;
- 实例:克隆一份给变量
var arr1=["mei","hao","de","yi","tian","a"] //需求:克隆一份arr1给arr2,不考虑arr1是否改变 var arr2=arr.splice(0); //运行的结果中,arr1为空数组,arr2内容与arr1原来相同;
- push()
- 第二组:截取/查找、拼接、克隆——原来数组不会发生变化;
- slice(m,n)
- 作用:截取,克隆
- 参数:m,n-从索引m开始,查找到索引n结束,包前(m代表的元素)不包后(n代表的元素);
- m:start,开始查找的索引值;正负整数,当为-1时,即倒数第一个元素
- n:end,结束查找的索引值,正负整数,可省略,当省略时,即从开始一直到末尾;
- 返回值:被选取的数组元素构成的新数组;
- 原来数组不发生改变;
- 实例:请查找到[m,n]项:即找到m到n项
var ree=arr.slice(m-1,n);//第m项对应的索引值为m-1 - 功能:克隆数组
var rew=arr.slice(0);//或arr.slice()
- concat()
- 作用:数组拼接,克隆
- 参数:
- 数组名,多个数组之间用逗号相连
- 数组元素,起到添加元素的功能,即arr.concat(["mei","hao"]);注:元素可以不是数组,可以是数字,即concat([1,2,3],[2])与concat([1,2,3],2)结果是一样的;
- 返回值:拼接成的新数组;
- 原数组不发生改变;
- 功能:克隆
var rew=arr.concat();//不填加参数,即达到克隆的效果;
- slice(m,n)
- 第三组:数组转字符串——原来数组不会发生变化;
- toString()
- 作用:数组转字符串;
- 参数:无;
- 返回值:以逗号连接每个数组元素构成的字符串;
- 原数组没有发生改变;
var arr=[1,2,3,4,5,6]; var str=arr.toString(); console.log(str);//打印的结果是"1,2,3,4,5,6"—其中","为一个字符; - join()
- 作用:以特定符号连接数组元素形成新的字符串;
- 参数:任意符号,用于连接数组元素;
- 返回值:以制定符号拼接数组元素形成的字符串;
- 原数组没有发生改变;
- eval():把字符串作为JS代码来执行;
- 实例1:如果参数设置为运算符号,将字符串实现运算
var arr=[1,2,3,4,5,6]; var str=arr.join("+"); console.log(str);//打印的结果是"1+2+3+4+5+6"—其中"+"为一个字符; var sum=eval(str);//sum值为加法运算求和值;- 实例2:字符串str1="alert(123)",通过eval()使字符串转化为JS代码执行;
var str1="alert(123)"; eval(strl);//页面弹出123;
- toString()
- 第四组:数组的翻转和排序——原来数组会发生变化;
- reverse():翻转
- 功能:数组元素倒着写出来;
- 参数:没有;
- 返回值:返回一个跟原来被翻转后的数组一样的数组;
- 原数组发生改变;
- sort():排序
- 功能:数组元素排序;
- 参数:函数;
- 返回值:返回一个跟原来被排序后的数组一样的数组;
- 原数组发生改变;
ary.sort(function(a,b){ return a-b;//升序:从小到大排列; return b-a;//降序:从大到小排列; }); - reverse():翻转
- 第五组:数组常用但不兼容的方法:
- indexOf()
- 功能:查找特定的元素内容;
- 参数:要查找的内容;
- 返回值:如果找到,则返回内容对应的索引值/位置;如果没找到,返回-1;
- 原数组没有发生变化;
- forEach()
- forEach()用来遍历数组;
- forEach()有两个参数:1)callback回调函数;2)context:用来改变this指向;
- 回调函数中有三个参数:1)数组的对应的内容;2)索引;3)原数组
- context是用来改变this指向的,可传可不传,如果不传的话,默认this是window;如果传了按传的来;
- 返回值:undefined; 没有返回值;
- 原数组不发生变化;
var arr=["mei","hao","de","yi","tian","a"]; var objm={}; arr.forEach(function (item,index,input) { console.log(this); },objm); - map():也是遍历数组,跟forEach()功能一样,只是forEach()没有返回值,map有返回值;
- indexOf()
- 学习思路,需要关注4点:
- 实例:验证码的获取代码:获取四个不重复的代码;
<script>
var str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var arr=[];
//思路1:利用while循环进行判断
while(arr.length<4){
var rnd=Math.round(Math.random()*61);//获取0到61之间随机数
if(arr.indexOf(str[rnd])===-1){//查找数组中的是否已经存在该元素,若没有则输出-1;
arr.push(str[rnd]);
}
}
//思路2:利用for循环进行判断
for(var i=0; i<4; i++){
var rnd=Math.round(Math.random()*61);//获取0到61之间随机数
if(arr.indexOf(str[rnd])===-1) {//查找数组中的是否已经存在该元素,若没有则输出-1;
arr.push(str[rnd]);
}else{
i--;//如果数组中已经存在元素了,就必须重新再进行循环,通过i-1来保证循环拿到的元素个数;
}
}
</script>
- 随机数的获取: 获取[n,m]的随机数代码:
var rnd=Math.round(Math.random()*(m-n)+n);;
<script>
var rnd=Math.round(Math.random()*61);//获得0-61之间的随机数代码
</script>
- 封装步骤:
- 把除了父容器以外的函数,都剪切,放到一个新的函数中,并起个名字;
- 把函数中可变的部分,作为形参;
- 在外面调用函数,并传入实参;
- 把html部分,复制多份,对待宽度不同的个别部分,分别设置;
- 获取所有的父容器,逐个遍历后,调用函数;
<body>
<div class="wrap" style="width:803px;">....</div>
<div class="wrap">....</div>
<div class="wrap" style="width:401px;">....</div>
<script>
var oawrap=document.getElementsByClassName("wrap");
for(var i=0; i<oawrap.length; i++){
tab(oawrap[i]);//调用函数,添加实参
}
function tab(ioawrap) {
var oli=ioawrap.getElementsByTagName("li");
var odiv=ioawrap.getElementsByTagName("div");
for(var i=0;i<oli.length; i++){
oli[i].index=i;
oli[i].onclick=function () {
for(i=0;i<oli.length; i++){
oli[i].className= "";
odiv[i].className="hide";
}
this.className="active";
odiv[this.index].className="show";
}
}
}
</script>
</body>
- 知识点掌握:
- 数据类型及区别;
- 九九乘法表
- 选项卡两种思路:自定义属性,函数闭包;
- 求和函数:实参个数不确定下的求和函数(arguments);
- 数组的常用方法:14种;
- 随机验证码:两种思路:for循环和while循环;