字符串的替換問題
var str = 'my name is {$name}, I like {$hobby}';
var obj = {name: '小紅', hobby: '看電影'};
//輸出 my name is 小紅, I like 看電影
答案
str.replace(/{\$(\w+)}/g, function(match, p1){
return obj[p1];
})
結果
討論
- $符需要轉義
- 要添加g,使其全局匹配而不是隻匹配一次
- /正則表達式/
new衝突
完善下面代碼已保證代碼可以正確運行
function ArrayLike(){
this.length = 0;
}
//補充code
var arr = new ArrayLike();
console.log(arr.length); //0
arr.push(5);
console.log(arr.length); //1
console.log(arr[0]); // 5
答案
解決方法有二
第一種方式
function ArrayLike(){
this.length = 0;
return new Array();
}
第二種方式
ArrayLike.prototype = new Array();
討論
- 第一種方式呢是直接返回一個Array實例。儘管new會返回一個對象,但是Array實例會覆蓋他。
- 第二種方式則是讓ArrayLike繼承Array,這樣其實例就可以擁有Array的方法了。
優化代碼問題
var divs = document.getElementsByTagName('div');
for(var i = 0; i < divs.length; i++) {
if(document.addEventListener) {
divs[i].addEventListener('click', function(){
console.log('div');
})
} else if(document.attachEvent){
divs[i].attachEvent('onclick', function(){
console.log('div');
})
}
}
- addEventListener爲DOM2,attachEvent爲IE,需要添加DOM0的
divs[i]['onclick'] = function(){}
- 判斷divs是否合法
if(divs!=null)
- 每次都讀取divs的長度,將其保存在變量中
var length = divs.length
歡迎補充~~