Js笔记-第17课

// 17

// 作业

//深度拷贝

var obj = {

name:'rong',

age:'25',

card:['visa','alipay'],

nam :['1','2','3','4','4']

}

 

function clone (orig,target){

var target = target||{};

 

var arrstr= '[object Array]';

 

for(var prop in orig){

if(orig.hasOwnProperty(prop)){

 

if (typeof(orig[prop]) == 'object'){

if((Object.prototype.toString.call(orig[prop])) == arrstr)

{

target[prop] = [];

}else{

target[prop] = {};

}

clone(orig[prop],target[prop]);

 

}else{

target[prop] = orig[prop];

}

}

}

return target;

}

var obj1 = {};

clone(obj,obj1);

 

//三步运算符 ?: 判断条件 则走前面 则走后边

//简化代码

 

var obj = {

name:'rong',

age:'25',

card:['visa','alipay'],

nam :['1','2','3','4','4']

}

 

function clone (orig,target){

var target = target||{};

 

var arrstr= '[object Array]';

 

for(var prop in orig){

if(orig.hasOwnProperty(prop)){

 

if (typeof(orig[prop]) == 'object'){

 

target[prop] = ((Object.prototype.toString.call(orig[prop])) == arrstr)?

[]:{};

clone(orig[prop],target[prop]);

 

}else{

target[prop] = orig[prop];

}

}

}

return target;

}

var obj1 = {};

clone(obj,obj1);

 

//toString s必须大写

// hasOwnProperty

// Object.prototype.toString.call O大写

 

//数组操作方法

 

// push()---从数组最后一位开始插入数据(参数) 返回值为数组长度

// pop()----剪切数组最后一位数据 (没有参数,返回值为最后一位数据)

 

// unshift() ----从数组第一位插入数据

// shift() ----剪切数组第一位数据

 

// splice() 从第几位开始,截取多少长度,在切口处添加新数据,添加的数据长度不一定等于截取的数据,返回值为截取数据组成的数组

 

// reverse() 数字逆转顺序 返回逆转后的数组

 

// sort()

// 对数组进行排序,返回值为改变后的数组,按照字符串的ascall码排序,空值为默认值,升序排列

// 参数必须为函数

// 1、必须写俩形参

// 2、看返回值,当返回值为负数时,那么前面的数放前面

// 为正数,那么后边的数放在前面

// 0,不动

 

// concat 链接两个数组 并返回一个新数组,原数组不变 arr.concat(arr1) ,arr1数组内容加到arr后边,返回一个新数组

// slice(1,3) 参数为2 从第一位开始截取到第3位(含)并返回截取部分数组,原数组不改变,一位参数为从第n位开始

// 截取到末位,无参数为截取整个数组

// jion'-') 参数为字符串,按照字符串中内容为连接符连接数组,返回一个字符串

// split('-') 按照参数将字符串拆分成字符串 jion逆操作

// 类数组

// 属性要为索引(数字) 属性,必须有length属性,最好有push方法

 

// 作业

// 封装typeof

// typeof的返回值共有六种:

// number, boolean, string, undefined, object, function.

 

// number

// typeof(10);

// typeof(NaN);

// //NaNJavaScript中代表的是特殊非数字值,它本身是一个数字类型。

// typeof(Infinity);

//

/////////2.boolean

// typeof(true);

// typeof(false);

 

//////// 3.string

// typeof("abc");

 

// ///////4.undefined

// typeof(undefined);

// typeof(a);//不存在的变量

 

// ///////5.object

// 对象,数组,null返回object

// typeof(null);

// typeof(window);

 

// //////6.function

// typeof(Array);

// typeof(Date);

 

//分类 number string boolean function undefind 无需判断 只需判断object

 

function type(a) {

if(typeof(a) !=="object"){

return typeof(a);

}else {

return Object.prototype.toString.call(a);

}

 

}

 

// 数组去重

// 要求在原型链编程

Array.prototype.unique = function (){

var b = [];

for(var i = 0; i < this.length; i++){

for(var j = 0;j < b.length; j++){

if(this[i] === b[j])

{break;}

}

if(j == b.length){b.push(this[i])}

}

return b;

 

}

//利用对象的特性,属性名不能重复,为每个属性赋值,依次判断是否有值

Array.prototype.unique = function (){

var obj = {},

arr = [],

len = this.length;

for(var i = 0;i < len; i++ ){

if(!obj[this[i]]){

obj[this[i]]= "1";

//判断objthis[i]是不是undefind,如果是 就说明此属性名没有,则赋值1

arr.push(this[i]);

}

}

return arr;

}

 

 

//函数形式

// function test (a){

// var b = [];

// for(var i = 0; i < a.length; i++){

// for(var j = 0;j < b.length; j++){

// if(a[i] === b[j])

// {break;}

// }

// if(j == b.length){b.push(a[i])}

// }

// return b;

 

// }

猜你喜欢

转载自www.cnblogs.com/aiwuxia/p/9368911.html