一.三目运算
(1).基本结构
a > 0 ? console.log('大于0') //这里可以写注释
:console.log('小于等于0');
这么写整洁一点也好写注释,也记住?后面的语句就不要加上分号了
(2).接收结果
var str = a > 0 ? '大于0'
:'小于0'
(3).嵌套
str = a > 0 ?(
a > 3 ? '大于3'
:'小于3'
)
:'小于等于0'
二.对象克隆
var person1={
name: '张三',
age:18
}
var person2={};
for(var key in person1){
person2[key]=person1[key];
}
person2.name='李四';
console.log(person1,person2);
三.浅拷贝、深拷贝
(1).浅拷贝
Object.prototype.num=1;
var person1={
name:'张三',
age:18,
son:{
first:'Jenney'
},
arr:[]
}
var person2={}
//浅拷贝
for(var key in person1){
person2[key]=person1[key]
}
person2.son.first='cc';
console.log(person1,person2)
如果更改person2的引用属性person1也会改变 ,而且还会在person2中把原型也循环出来
(2).浅拷贝踢除原型
Object.prototype.num=1;
var person1={
name:'张三',
age:18,
son:{
first:'Jenney'
},
arr:[]
}
//浅拷贝
var qcappy=(function(){
var target ={};
var cappy=function(origin){
for(var key in origin){
if(origin.hasOwnProperty(key)){
target[key]=origin[key]
}
}
return target;
}
return cappy;
})();
var person2=qcappy(person1);
person2.son.first='cc';
console.log(person1,person2);
(2).深拷贝
Object.prototype.num=1;
var person1={
name:'张三',
age:18,
son:{
first:'Jenney'
},
arr:[]
}
//深拷贝
var inhert=(function(){
var toStr=Object.prototype.toString,
arr='[object Array]';
var scopy= function(origin,target){
var obj2=target||{};
console.log(obj2)
for (var key in origin) {
if (origin.hasOwnProperty(key)) {
if(typeof(origin[key])==='object'&&origin[key]!==null){
obj2[key]=toStr.call(origin[key])===arr ? []: {};
scopy(origin[key],obj2[key])
}else{
obj2[key]=origin[key]
}
}
}
return obj2;
}
return scopy;
}());
var person2=scappy(person1);
person2.son.first='cc';
console.log(person1,person2);
这样就解决了在拷贝对象更改引用类型值时被拷贝对象引用值会被更改的问题
(3).用json做深拷贝
var c=JSON.stringify(obj);
var d=JSON.parse(c);