先来简单谈谈克隆吧:
克隆:
便利对象 for(var prop in obj)
1.判断是不是原始值 typeof()
2.引用值判断是数组还是对象 //tostring instanceof construtor
3.建立相对应的数组或对象
<script type="text/javascript">
var obj={
name:"zhangsan",
age:12,
card:['haha','master'],
wife:{
name="xiaohong",
son:{
name:'baby'
}
}
}
</script>
var obj1={ //拷贝过程
name:obj.name,
age:12,
card:[obj.card[0],obj.card[1]], //不是原始值,先创建一个新空数组 后将信息拷贝进去
wife:{
name="xiaohong",
son:{
name:'baby'
}
}
}
数组:
var arr=[1,2];
var arr=new Array(1,2,3);
var arr=new Array(10); //一个参数 10代表数组的长度
var arr=[10]; //数组包含一个值 10
可以改变原数组的一类:
push(); 在数组的最后一位添加数据,可以同时添加
pop(); 把数组的最后一位剪切出去,在执行过程中会将传入的参数忽略
shift(); 在数组的前面减
unshift(); 在数组的前面增加
splice(); 向/从数组中添加/删除项目,然后返回被删除的项目。
sort();数组排序
按ASCⅡ码排序的
//1.必须写两个形参
//2.看返回值 1)当返回值为负数时,那么前面的数放在前面
// 2)为正数,那么后面的数在前面,调换位置
// 3)为0,不动
//会执行无数次 符合冒泡排序算法
var arr=[10,2,3,4,10,8];
//写法1.
arr.sore(function(a,b){
if(a>b){ //升序排序(a>b) //降序排序(a<b)
return 1;
}else{
return -1;
}
});
//写法2.(1)
arr.sore(function(a,b){
if(a-b>0){ //升序排序(a>b) //降序排序(a<b)
return a-b;
}else{(a-b<0)
return a-b;
}
});
//写法2.(2)
//当然我们可以简单写
arr.sore(function(a,b){
return (a-b); //升序
return (b-a); //降序
});
//给一个有序的数组乱序:
var arr=[1,2,3,4,5,6,7,8,9];
//Math.random(); //返回0~1的随机数 (0,1)
arr.sort(function(){
return Math.random()-0.5; //返回任意概率的正数或负数
});
//一个排序的实例子
var arr=['aa','ssss','ooooo','s','tttttt','fff'];
arr.sort(function(a,b){
return a.length-b.length; //按字节长度排序
});
不改变原数组:
concat();
toStrong();
slice(); (从该位开始截取,截取到该位) 不写就是整个截取
join(); (字符串拼接,将每一项用该字符串拼接起来) 不传是按逗号链接的
split();
类数组:
var obj={ //这是一个类数组,也是一个对象
"2":"a",
"3":"b",
"length":2,
"push":Array.prototype.push
}
obj.push('c');
obj.push('d');
//类数组:属性要为索引(数字)属性,必须有length属性,最好加上push
Array.prototype.push=function(target){ //push(); 的原理
obj[obj.length]=target;
obj.length++;
}
给类数组加上splice 属性,它的表现形式(也就是长相啦)将和数组一样:我们来看一下吧给上面的类数组加上splice:Array.prototype.splice
,显示结果为:
总结一下啦:
- 1.可以利用属性名模拟数组的特性
- 2.可以动态的增长 length 属性
- 3.如果强制让类数组调用 push 方法,则会根据 length 属性值的位置进行属性的扩充
【题1】
封装type
封装type 实现:
typeof([]) --array
typeof({}) --object
typeof(function) --object
typeof(new Number()) --number Object //包装类
typeof(123) --number
// 1.分两类 原始值 引用值
// 2.区分引用值 (数组 对象 包装类)
【题2】
在原型链上的数组去重,再把去重后的数组输出:
(思路:数组的每一位放在对象里,作为属性名,判断对象下的属性名是否有值。if 判断当没有值操作,给属性值一个任意的值(这里我们给的是一个字符串”abc”))