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);
// //NaN在JavaScript中代表的是特殊非數字值,它本身是一個數字類型。
// 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";
//判斷obj中this[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課