三目運算、物件克隆、深拷貝和淺拷貝

亦世發表於2018-08-20


三目運算子/三元運算子

巢狀寫法:

var str = 89 > 9 ? (

                                  '89' > '9' ? '通過了'  : '內層未通過'

                               )

                             :  '外層未通過';    //str   內層未通過

? :   具有return的功能

物件克隆


淺拷貝:只處理原始屬性,不處理引用值屬性

三目運算、物件克隆、深拷貝和淺拷貝

for迴圈如此處理將會導致原型鏈上的num屬性也被放到Person2,解決方法:

三目運算、物件克隆、深拷貝和淺拷貝

深拷貝

function deepClone(origin,target){
    var target = target || {},
        toStr = Object.prototype.toString,
        arrType = '[object Array]';
    for (var key in origin){
        if(origin.hasOwnProperty(key)){
            if (typeof(origin[key]) === 'object' && origin[key] != null)
            {
                //if(toStr.call(origin[key]) === arrType){
                //   target[key] = [];
                //}else {
                //    target[key] = {}
                //}
                target[key] = toStr.call(origin[key]) === arrType ? [] : {}
                deepClone(origin[key],target[key])
            }else {
                target[key] = origin[key]
            }
        }
    }
    return target;
}
複製程式碼

深拷貝另一個方法:JSON.stringfy和JSON.parse


相關文章