對象枚舉 , 數(shù)組和對象遍歷 三目運算符 對象的深度克隆 —JS學習筆記

枚舉 遍歷

遍歷數(shù)組

 // 如何取數(shù)組的值關(guān)鍵 :數(shù)組有l(wèi)ength 
        var arr = ['1蘋果', '2香蕉', '3芒果', '4檸檬'];
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]); // 1蘋果 汽畴,2香蕉戈二,3芒果,4檸檬
        }

遍歷對象, var prop in obj 取出對象所有屬性的值(不取屬性 只取值)

 var obj = {
            a: 123,
            b: 234,
            c: 345,
        };

  for (var prop in obj) {
  //  console.log(obj.prop); 結(jié)果是undefined 
  //  底層原理結(jié)果是:console.log(obj['prop']) 此時的'prop'代表的是一個屬性名
   //  obj.name------>obj['name'] 



     if (obj.hasOwnProperty(prop)) { //判斷prop 是不是自己的屬性队塘。hasOwnProperty(prop)袁梗,屬性名的字符串形式傳進去
        console.log(obj[prop]); //此時的prop 代表的是一個變量  系統(tǒng)帶的不會遍歷到, 只有自己設(shè)的才會被遍歷到
    //  cosole.log(obj.prop)    obj.prop底部原理是 ————> obj['prop'] 
//obj.prop 的prop 是字符串''prop''-->obj.''prop''憔古。obj[ ]內(nèi)部是變量 遮怜、表達式、基本類型
// obj[1+2] =》 obj[3]
// var a = "A"; var b="B"; obj[a+b] => obj["AB"]
            }

    }




數(shù)組也算特殊類型的對象鸿市,也可以用var prop in arr取出數(shù)組所有索引的值

 var arr1 = ['我在圖書館', 25, 'xuexi']锯梁;
var key//  和var key in arr1 結(jié)果一樣 可以在外部申明變量
for ( key in arr1) {
          console.log(arr1[key]); //我在圖書館  25  xuexi

   }
知識點:

obj.name=obj['name']
1+''='1';

下面的案例很好的將這個兩個知識點運用到

 var deng = {
            wife1: {
                name: "小趙",

            },
            wife2: {
                name: "小趙",

            },
            wife3: {
                name: "小趙",

            }
            sayWife: function(num) {

                return this['wife' + num]
            }

        }
  console.log(deng.sayWife(3)); // {name:''小孫"}


正確區(qū)分數(shù)組和對象的方法

 typeof ([ ])--->"object"  
typeof( {}) ---->"object"

typeof() 無法區(qū)分數(shù)組和對象。

1.instanceof
instanceof: A instanceof B -->> A對象是不是B構(gòu)造函數(shù)構(gòu)造出來的
正確說明: 看A對象的原型鏈上 有沒有 B的原型焰情,其實起作用的是 constructor
[ ] instanceof Array--->true
var obj={ },obj instanceof Array ---->false
2.constructor
[ ].constructor ---->function Array(){}
var obj={},obj.constructor ---->function Object(){ }

3.toString(){ } 推薦使用陌凳,區(qū)別數(shù)組和對象
包裝類都重寫了自己的toString方法,
Number.prototype.toString
Arry.prototype.toString
Boolean.prototype.toString
String.prototype.toString
只有Object.prototype.toString 能夠區(qū)分

 Object.prototype.toString=functon(){ 
---》 識別調(diào)用者 并且返回相應(yīng)的結(jié)果  

}  //我們需要找的也是這個調(diào)用者的類型内舟。這個調(diào)用者 其實也就是函數(shù)方法的 this冯遂。

猜想:通過包裝類特點可了解 ,().toString() 是處理調(diào)用者的谒获。根據(jù)調(diào)用者的數(shù)據(jù)類型可選擇下面對應(yīng)的方法蛤肌。

Object.prototype.toString.call( [ ]); // ''[object Array ]''
bject.prototype.toString.call(123); //''[object Number]''
bject.prototype.toString.call({ }); //"[object obje

三目運算符

三目運算符號:
條件判斷?是:否 并且會返回值
比if else高端點 有返回值

var Num = 1 > 0 ? ("10" > 9 ? 1 : 0) : 2; //結(jié)果是1 
var Num2 = 1 > 0 ? ("10" > 9 ? 1 : 0) : 2; //結(jié)果是0 

克隆

淺度克隆,互相影響
 function clone(ori, target) {

            var tar = target|| {}; //排除沒有傳target —target= undefied 或者 null
       
            for (var prop in ori) {


                tar[prop] = ori[prop];
            }
            return tar;
        }
深度克隆 各自獨立

步驟:
遍歷對象批狱,(var prop in object)
1,判斷是否是原始值 typeof() 判斷是否是 object
2,判斷是數(shù)組還是對象 使用 toString() 總共有3種方法 instanceof() constructor--->不建議使用 有跨子域的問題裸准。
3,建立相應(yīng)的數(shù)組或?qū)ο?br> 4,遞歸

 function deepClone(origin, target) {
            var target = target || {}, // 遍歷對象 排除沒有傳target —target= undefied 或者 null
                toStr = Object.prototype.toString,
                arrStr = "[object Array]";
            for (var prop in origin) {
                // 只取自身的屬性和值。避免拿原型鏈上的屬性和值
                if (origin.hasOwnProperty(prop)) {
                    // 判斷是原始值是否是引用值: 方法typeof() null
                    if (origin[prop] !== "null" &&
                        typeof(origin[prop]) == 'Object') {
                        // 判斷是 對象還是數(shù)組的引用值
                        target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {};
                        deepClone(origin[prop], target[prop]);





                    } else {
                        // 原始值時:
                        target[prop] = origin[prop];

                    }



                }
            }
            return target;
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赔硫,一起剝皮案震驚了整個濱河市炒俱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖权悟,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸王,死亡現(xiàn)場離奇詭異,居然都是意外死亡峦阁,警方通過查閱死者的電腦和手機谦铃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榔昔,“玉大人驹闰,你說我怎么就攤上這事∪龌幔” “怎么了嘹朗?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诵肛。 經(jīng)常有香客問我屹培,道長,這世上最難降的妖魔是什么怔檩? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任褪秀,我火速辦了婚禮,結(jié)果婚禮上珠洗,老公的妹妹穿的比我還像新娘溜歪。我一直安慰自己,他們只是感情好许蓖,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布蝴猪。 她就那樣靜靜地躺著,像睡著了一般膊爪。 火紅的嫁衣襯著肌膚如雪自阱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天米酬,我揣著相機與錄音沛豌,去河邊找鬼。 笑死赃额,一個胖子當著我的面吹牛加派,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跳芳,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼芍锦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了飞盆?” 一聲冷哼從身側(cè)響起娄琉,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤次乓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孽水,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體票腰,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年女气,在試婚紗的時候發(fā)現(xiàn)自己被綠了杏慰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡主卫,死狀恐怖逃默,靈堂內(nèi)的尸體忽然破棺而出鹃愤,到底是詐尸還是另有隱情簇搅,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布软吐,位于F島的核電站瘩将,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凹耙。R本人自食惡果不足惜姿现,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肖抱。 院中可真熱鬧备典,春花似錦、人聲如沸意述。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荤崇。三九已至拌屏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間术荤,已是汗流浹背倚喂。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓣戚,地道東北人端圈。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像子库,于是被迫代替她去往敵國和親舱权。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容