1. 程式人生 > >Js筆記-第17課

Js筆記-第17課

ray 簡化 是不是 targe function 一個數 作業 def return

// 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;

// }

Js筆記-第17課