1)編寫正則表達式,匹配密碼,要求密碼必須以字母開頭,必須有數字,字母,或 _ - . 的組合 ,長度5-15位 html
var reg = /^[a-zA-Z](?![a-zA-Z]+$)(?![0-9]+$)(?![-_.]+$)[a-zA-A\d-._]{4,16}$/g;
^ 從頭開始正則表達式
[a-zA-Z] 匹配的第一位是字母數組
(?![a-zA-Z]+$) 向後預查到結尾 不匹配全是字母的狀況app
(?![0-9]+$) 向後預查不匹配全是數字的狀況dom
(?![-_.]+$) 向後預查不匹配全是 - _ .的狀況 this
[a-zA-Z\d.-_]{4,16} 由於前面第一位 的 [] 消耗字符串, 因此剩餘要匹配的長度減一 spa
$ 結尾 prototype
這裏主要運用到了 正則表達式的預查 code
更多關於 正則表達式 --->個人博客htm
2)用源生js 編寫一個鏈式調用 new Box(100,100,red).addTo(body).addTo(body).delay(3000).remove(); 實現 用過如上代碼 向body 添加兩個 100*100的紅色的盒子,延時3S後移出
小生不才 只是實現了效果,可是,應該有一部分不是這道題想要的
function Box (wid,hei,col) { this.wid = wid || 0; this.hei = hei || 0; this.col = col || 'black'; this.queue = []; //隊列儲存生成的dom } Box.prototype.addTo = function(foo){ //這裏也要注意,根據題,能在body插入多個Dom,因此,要生成的時候也要生成多個dom, this.foo = foo; //因此 createElement要在這一步, 若是在上一步的話 new Box()只調用一次 var box = document.createElement('div'); //這一步 插入多少次 只有一個dom(我線上筆試的時候就寫錯了) box.style.width = this.wid + 'px'; box.style.height = this.hei + 'px'; box.style.backgroundColor = this.col; document[foo].appendChild(box); this.queue.push(box); return this; } Box.prototype.delay = function(tim){ return this; }
Box.prototype.remove = function(){ var self = this; setTimeout(() => { self.queue.forEach(ele => { document[this.foo].removeChild(ele); }); }, this.tim); return this; }
//這個delay不會,去網上找的 , 使用 循環佔用cpu,可是他會在daaTo的dom顯示出來以前就進入循環狀態 ,阻塞了前面dom生成的效果this.tim = tim; //循環佔用cpu 還不能使用setTimeout , 改變循環的判斷值 , 就像是 while(flag){} 開始flag是true, 計時器結束了 flag = false //然而這樣是不行的, 改變了的 flag傳不進去, 若是把 計時器放在循環裏頭 那就是瘋了。。。。 //網上的 作法是 用 在循環裏用 new Date().getTime() 和 在循環外面 第一次執行就獲取的 new Date().getTime()+timer 進行比較 //來當作定時器 (timer是指 定時器傳進來的 毫秒數)
3)已知對象 obj = {'asfsd':'3123,'dsf':'2131,'gads':'3213','sdaf':2526} 實現將對象的key 按照ascii的順序排序(這道題應該考的是數組克隆)
var obj = {'abc':123,'cde':345,'bac':213,'def':456} function clone(src,tar){ //最簡單的一個克隆 不對原對象進行改變 for(var prop in src) { tar[prop] = src[prop]; } } var tar = {}; clone(obj,tar); var arrKey = []; for(var i in tar){ //便利出key的數組 arrKey.push(i) } var arrOrder = arrKey.sort() console.log(arrOrder);