JavaScript 三目运算符
三目运算符
形式:判断语句? 若为真,执行,并返回结果:若为假,执行,并返回结果
三目运算符其实就是简化版的if(){…}else{}语句
三目运算符是节约我们操作的
// 形式: 条件判断? 是 : 否 并且会返回值 var num = 1 > 0 ? 2 + 2 : 1 + 1; // 如果1大于0吗?,是的话返回2+2并把结果返回,不是返回1+1并把结果返回 console.log(num); // 4
三目就是条件判定,简化版的if并且比if高端,它不仅能判定,还能把这个值返回,相等于else if里面加return
写一个复杂点的三目
var num = 1 > 0 ? ("10" > 9 ? 1 : 0) : 2; // 先算括号里的 console.log(num); // 1
字符串"10"大于数字9,字符串和数字比,会先转化成数字
字符串和数字比会先转化成数字,换一个,字符串和字符串比
var num = 1 > 0 ? ("10" > "9" ? 1 : 0) : 2; console.log(num); // 0 /*** 先算括号里的, 括号里又是一个三目,三目返回的结果, 括号里"10" > "9"吗?字符串"10"不大于字符串"9",字符串比的是诸位的ACSII码。 "10"这叫两位字符串,字符串叫"一零"不叫"十","9"这叫单位的字符串。 字符串比的是每一位的ASCII码,首先第一位"1"的ASC码就没有"9"的ACSII码大。所以字符串里面"10"是绝对不大于"9"的,在字符串里面"10"是小于"9"的。 ("10" > "9" ? 1 : 0)返回0,最后最后"1 > 0"返回0 ***/
接下来用三目运算符,简化一下深度拷贝
function deepClone(origin, target){ var target = target || {}, toStr = Object.prototype.toString, arrStr = "[object Array]"; for(var prop in origin){ if(origin.hasOwnProperty(prop)){ if(typeof origin[prop] !== "null" && typeof origin[prop] == 'object'){ // 1).这里简化,最后target[prop]要拿结果。 // if(toStr.call(origin[prop]) == arrStr){ // target[prop] = []; // }else{ // target[prop] = {}; // } // 2). "toStr.call(origin[prop]) == arrStr"放到问号前面,不用加括号直接问号。 // PS: 为了避免运输符优先级发生混乱,一般长的、没自信的加一个括号 target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; deepClone(origin[prop], target[prop]); }else{ target[prop] = origin[prop]; } } } return target; } var obj = { name : 'abc', age : 123, card : ['vise', 'master'], wife : { name : "bcd", son : { name : "aaa" } } } var objCopy = deepClone(obj); console.log(objCopy); // {name: "abc", age: 123, card: Array(2), wife: {…}} console.log(obj); // {name: "abc", age: 123, card: Array(2), wife: {…}} obj.card.push('abc'); // obj.card有两个值,再push一个abc进去 console.log(objCopy.card); // objCopy.card还是两个["vise", "master"] console.log(obj.card); // ["vise", "master", "abc"]
Leave a comment
0 Comments.