1 雙等號的隱式調用和數據劫持
- 求下面條件,在a為什么樣時,等號成立
if(a == 1 && a == 2 && a == 3){console.log('等號成立')
}
1.1 雙等號的隱式轉換
- 首先得了解雙等號的隱式轉換規則
等式 | 備注 |
---|---|
對象 == 字符串 | 隱式調用 toString方法將對象轉換成字符串 |
null == undeifned | 相等 |
NaN == NaN | 不相等 |
其他情況 | 都轉換成數字進行比較. |
- 思路: 根據雙等號的隱式轉換規則,每次調用調用toString(),可以重寫a屬性下面的toString方法,初始時i的值設置為0,每次返回++i
// 雙等號
var a ={i: 0,toString(){return ++this.i}
}
if(a == 1 && a == 2 && a == 3){console.log('等號成立')
}
1.2 數據劫持
-
還有一種方法是使用數據劫持,沒當讀取a元素時返回一個i
-
數據劫持回顧:
// ES5: Object.defineProperty
Object.defineProperty(obj, 'name', {get(){console.log('獲取')},set(){console.log('設置')}
})
- 使用數據劫持完成小栗子
var i = 0;
Object.defineProperty(window, 'a',{get(){return ++i;}
})