三目運算子與深層克隆(簡化)
阿新 • • 發佈:2018-11-12
三目運算子:
條件判斷?是 :否 返回結果
var num = 1 > 0? 2+2 : 1+1; 先判斷1>0嗎?1大於0,返回冒號前面的4
var num = 1 < 0? 2+2 : 1+1; 先判斷1<0嗎?1不小於0,返回冒號後面的2
這個三目運算子比if更高階,if只能判斷,並不能返回結果,就相當於else if裡面加return。
var num = 1 > 0 ? ("10" > 9 ? 1 : 0) : 2;
var num = 1 > 0 ? ("10" > "9" ? 1 : 0) : 2;
先算括號裡面的,字串10小於字串9,字串比較規則是比較逐位的ASCII值!
返回0,1大於0,返回0.
那現在簡化一下深層克隆的程式碼:
var obj = { name : "abc", age : 123, card : ["visa","master"], wife : { name : "bcd", son : { name : "aaa" } } } var obj1 = { } function deepClone(origin,target){ var target = target || {}, toStr = Object.prototype.toString, arrStr = "[object Array]"; for(var pro in origin){ if(origin.hasOwnProperty(pro)){ if(origin[pro] != "null" && typeof(origin[pro]) == "object"){ target[pro] = (toStr.call(origin[pro]) == arrStr)? [] : {}; deepClone(origin[pro],target[pro]); }else{ target[pro] = origin[pro]; } } } return target; }
是不是很簡單了!