十四、三目运算符、对象克隆、浅拷贝、深拷贝、模块化复习
一、三目运算符
又叫三元运算符,相当于if的三段式:
var a = 5;
if(a > 0){
console.log('大于0');
}else{
console.log('小于等于0');
}
a > 0 ? console.log('大于0') //相当于三段式if
:console.log('小于等于0');
1.1 三目运算符的特点
可以用一个变量去接收三目运算的结果,即三目运算会默认return结果。
var a = 5;
var str = a > 0 ? '大于0' //相当于这里有return
: '小于等于0';
console.log(str); // '大于0'
if判断里可以嵌套if,当然三目运算中也可以嵌套三目运算:
var a = 3,
str = '';
if(a > 0){
if(a > 3){
str = '大于3';
}else{
str = '大于0小于等于3';
}
}else{
str = '小于等于0';
}
console.log(str); //'大于0小于等于3'
用三目运算符来判断:
str = a > 0 ? (
a > 3 ? '大于3'
: '大于0小于等于3'
)
: '小于等于0';
console.log(str); //'大于0小于等于3'
一个关于三目的面试题:
var str = 89 > 9 ?(
'89' > '9' ? '通过了'
: '没通过'
)
: '外层通过了';
console.log(str);
控制台输出'没通过'
。
89>9结果为ture,进入冒号前的三目运算嵌套;比较运算符两侧都为字符串时,从第一个字符开始一 一 比较字符编码ASCII码值;字符8的ASCII码值小于字符9的ASCII码值,比较结束,判断为false,返回冒号后面的结果,即'没通过'
。
二、对象克隆
前导知识:
字面量形式创建的对象实际上是由
new Object()
创建的——>所以字面量对象的__proto__指向了0bject.prototype
——>0bject.prototype是所有对象(非自定义原型)的原型对象
——> 所有对象都继承0bject.prototype上的属性
2.1 浅拷贝
使用for in 遍历对象,把一个对象中的所有属性复制到另一个新对象中。
但是for in 遍历对象时,会把对象的原型链上的自定义属性也复制到新对象中,怎么办呢?
使用hasOwnProperty<