今年58同城的題目出的不深,大可能是考點基本概念,範圍比較廣。javascript
有一點值得注意的是,58的筆試不支持在線編譯,代碼靠手寫。因此平時練習的時候要多重視手寫代碼的能力,由於編輯器編寫和手寫仍是有很大區別的,面試也有很大機率讓你手寫代碼。css
題型:10道填空,5個問答,2個應用,一道編程。html
實現對象的深複製deepclone函數。前端
//利用 遞歸 來實現深複製,對屬性中全部引用類型的值,遍歷到是基本類型的值爲止。 function deepclone(src){ if(!src && typeof src !== 'object'){ return; } var dst = src.constructor === Array ? []:{}; for(key in src){ if(src.hasOwnProperty(key)){ if(src[key] && typeof src[key] === 'object'){ dst[key] = src[key].constructor === Array ? []:{}; dst[key] = deepclone(src[key]); }else{ dst[key] = src[key]; } } } return dst; } var a = { name : 'orange', age : '24', arr : [1,2,3,{a:2, b:'hello'},[4,5]], clone: function(){ console.log('helloworld'); } } a.clone(); //helloworld console.log(typeof a.clone); //function console.log(deepclone(a)); // { name: 'orange', // age: '24', // arr: [ 1, 2, 3, { a: 2, b: 'hello' }, [ 4, 5 ] ], // clone: [Function: clone] }
(1)判斷一個字符串是否是迴文串html5
//判斷是不是迴文串 function isPalindrome(str) { str = str.replace(/\W/g, '').toLowerCase(); return (str == str.split('').reverse().join('')); }
(2)定義一個含10個隨機數的數組,並去重java
var arr = []; for(var i=0; i<100; i++){ var num = parseInt(Math.random()*100); arr[i] = num; } function unique(arr){ var newArr = []; for(var i=0; i<arr.length; i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } return newArr; } console.log(arr); console.log(unique(arr));
_proto_是每一個對象都有的一個屬性,而prototype是函數纔會有的屬性。node
在JS裏,萬物皆對象。方法(Function)是對象,方法的原型(Function.prototype)是對象。所以,它們都會具備對象共有的特色。react
對象具備屬性__proto__,可稱爲隱式原型,一個對象的隱式原型指向構造該對象的構造函數的原型,這也保證了實例可以訪問在構造函數原型中定義的屬性和方法。面試
方法這個特殊的對象,除了和其餘對象同樣有上述_proto_屬性以外,還有本身特有的屬性——原型屬性(prototype),這個屬性是一個指針,指向一個對象,這個對象的用途就是包含全部實例共享的屬性和方法(咱們把這個對象叫作原型對象)。原型對象也有一個屬性,叫作constructor,這個屬性包含了一個指針,指回原構造函數。編程
總結:
1.對象有屬性__proto__,指向該對象的構造函數的原型對象。
2.方法除了有屬性__proto__,還有屬性prototype,prototype指向該方法的原型對象。
addEventListener false:事件冒泡 true:事件捕獲
//阻止事件冒泡 function stopBubble(event){ if(window.event){//兼容IE window.event.cancelBubble=true; }else{ event.stopPropagation(); } } //阻止默認事件 function stopDefaultEvent(event){ if(window.event){//兼容IE window.event.returnValue=false; }else{ event.preventDefault() } return false; }
當函數能夠記住並訪問所在的詞法做用域時就產生了閉包,即便函數是在當前詞法做用域以外執行。
//手寫一個閉包 function outer(){ var a = 2; function inner(){ console.log(a); } return inner; } var result = outer();//result引用內部函數outer result(); //2
閉包的特色:函數嵌套函數、內部函數能夠引用外部函數的參數和變量(詞法做用域)、參數和變量不會被垃圾回收機制收回
好處:但願一個變量長期駐紮在內存中、避免全局變量的污染、私有成員的存在
應用:閉包一般用來建立內部變量,使得這些變量不能被外部隨意修改,同時又能夠經過指定的函數接口來操做。 代碼封裝、模塊化。
回調函數、promise對象、事件監聽、發佈/訂閱 Javascript異步編程的4種方法
(1)3+true = 4
(2)http協議的前端緩存的四種方法
(3)Node.js的核心模塊 nodejs經常使用核心模塊介紹
HTTP模塊:處理客戶端的網絡請求
URL模塊:處理客戶端請求過來的URL
Query Strings模塊:處理客戶端經過`get/post`請求傳遞過來的參數
File System模塊:在服務端來操做文件,多是須要將瀏覽器上傳的圖片保存到服
務器,也多是須要將服務器的資源讀取以後返回給瀏覽器
Path模塊:操做文件的路徑,爲文件操做服務
Global模塊:全局共享的,不須要導入模塊便可以使用
(4)html5的本地存儲 cookie、localStorage、sessionStorage
(5)寫出四種設計模式 工廠模式、單例模式、觀察者模式、原型模式 設計模式
(6)css中的單位 rem和em分別相對於什麼?
px像素(Pixel)。相對長度單位。像素px是相對於顯示器屏幕分辨率而言的。
em是相對長度單位。相對於當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人爲設置,則相對於瀏覽器的默認字體尺寸。
rem爲元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。