前端面試 JS 篇
談談兩種設計模式
1:工廠模式
主要好處就是可以消除物件間的耦合,通過使用工程方法而不是 new 關鍵字。將所有例項化的程式碼集中在一個位置防止程式碼重複。
工廠模式解決了重複例項化的問題 ,但還有一個問題,那就是識別問題,因為根本無法搞清楚他們到底是哪個物件的例項。
function createObject(name,age,profession){
//集中例項化的函式
var obj = new Object();
obj.name = name;
obj.age = age;
obj.profession = profession;
obj.move = function () {
return this.name + ' at ' + this.age + ' engaged in ' + this.profession;
};
return obj;
}
var test1 = createObject('trigkit4',22,'programmer');//第一個例項var test2 = createObject('mike',25,'engineer');//第二個例項
2:建構函式模式
使用建構函式的方法 ,即解決了重複例項化的問題 ,又解決了物件識別的問題,該模式與工廠模式的不同之處在於:
1.建構函式方法沒有顯示的建立物件 (new Object());
2.直接將屬性和方法賦值給 this 物件;
3.沒有 renturn 語句。
null 和 undefined 的區別?
對未初始化的變數執行
typeof
操作符會返回undefined
值,對未宣告的變數執行typeof
操作符同樣也會返回undefined
值,所以我們在編寫程式碼的過程中應該顯示的初始化變數,那麼當typeof
返回undefined
的時候,我們就知道被檢測的變數還沒有被宣告而不是還沒有初始化。、undefined
值是派生自null
值的,他們的相等性測試要返回true
alert(null == undefined );//true
alert(null === undefined);//false
null
值表示一個空物件指標,而這也正是使用typeof
操作符檢測null
值會返回“object”
的原因。如果定義的變數準備在將來用於儲存物件,那麼最好將該變數初始化為
null
,而不是其他值,這樣一來,只要直接檢查 `null“ 值就可以知道相應的變數是否已經儲存了一個物件的引用。
if (car != null){
//對 car 物件執行某些操作
}
- 無論在什麼情況下都沒有必要把一個變數的值顯示的設定為
undefined
,可以同樣的規則對null
卻不適用。換句話說,只要意在儲存物件的變數還沒有真正儲存物件,就應該明確的讓該變數儲存null
值。這樣做不僅可以體現null
作為空物件指標的慣例,而且也有助於進一步區分null
和undefined
。
編寫一個函式實現對 Object,Array,Boolean,Number,String 這五種主要資料型別進行值複製
function clone(obj) {
var o;
switch (typeof obj) {
case "undefined":
break;
case "string":
o = obj + "";
break;
case "number":
o = obj - 0;
break;
case "boolean":
o = obj;
break;
case "object": // object 分為兩種情況 物件(Object)或陣列(Array)
if (obj === null) {
o = null;
} else {
if (Array.isArray(obj)) {
o = [];
for (var i = 0; i < obj.length; i++) {
o.push(clone(obj[i]));
}
} else {
o = {};
for (var k in obj) {
o[k] = clone(obj[k]);
}
}
}
break;
default:
o = obj;
break;
}
return o;
}
相關推薦
前端面試 JS 篇
談談兩種設計模式 1:工廠模式 主要好處就是可以消除物件間的耦合,通過使用工程方法而不是 new 關鍵字。將所有例項化的程式碼集中在一個位置防止程式碼重複。 工廠模式解決了重複例項化的問題 ,但還有一個問題,那就是識別問題,因為根本
前端面試js篇(3)
1.擷取字串abcdace的acealert('abcdace'.substring(4));2.規避javascript多人開發函式重名問題名稱空間封閉空間js模組化mvc(資料層、表現層、控制層)seajs變數轉換成物件的屬性物件化3.javascript面向物件中繼承實
前端面試--js程式碼片段(基礎中的基礎,持續更新中)
程式碼片段1: var arr1 = [1,2,3,4,5] var arr2 = [] for(var i = 0; i < arr1.length; i ++) { arr2.push(function(){ alert(i)
前端面試JS題目複習大綱
前端面試JS題目 JS 介紹js的基本資料型別。 Undefined、Null、Boolean、Number、String、 複雜資料型別:Object 介紹js有哪些內建物件? Object 是 JavaScript 中所有物件的父物件 資料封裝類物件
前端面試 js 你有多瞭解call,apply,bind?
函式原型鏈中的 apply,call 和 bind 方法是 JavaScript 中相當重要的概念,與 this 關鍵字密切相關,相當一部分人對它們的理解還是比較淺顯,所謂js基礎紮實,繞不開這些基礎常用的API,這次讓我們來徹底掌握它們吧! 目錄 call,apply,bind的基本介紹 call/a
前端面試(原生 js 篇) - 精確運算
一、面試題 問:開發的時候有用到過 Math 嗎? 答:很多啊。比如生成 GUID 的時候,就會用到 Math.random() 來生成隨機數。 問:別的呢?比如向下取整、向上取整? 答:向下取整是 floor(),向上取整是 ceil()。另外還可以用&nbs
前端面試指南之js篇
JavaScript JavaScript的組成 JavaScript 由以下三部分組成: ECMAScript(核心):JavaScript 語言基礎 DOM(文件物件模型):規定了訪問HTML和XML的介面 BOM(瀏覽器物件模
前端面試知識點大全——JS篇(二)
目錄 1.1 閉包 1.6 小結 5.1 區別 9.1 作用 9.2 使用 9.6 優點 9.7 缺點 10.跨域 1.閉包 與 作用域、作用域鏈
前端面試之js篇整理(一)
js的基本型別有哪些?引用型別有哪些?null和undefined的區別 js變數的值有兩種: 1.基本型別值:存放在棧記憶體的簡單資料型別。如Number、String 、Boolean、Null和Undefined這物種 2.引用型別值:存放在堆記憶
【前端面試之道小冊筆記】JS基礎篇No.1
prim 轉字符串 獲取 筆記 特點 只需要 att -s 沒有 1、數據類型 原始值:boolean、null、undefined、number、string、symbol 2、類型轉換: 轉Boolean 在條件判斷時,除了 undefined, null, f
前端開發--面試題整理(JS篇)
狀態 state oda 通過 cli 命名空間 script push arguments 1.截取字符串abcdace的acealert(‘abcdace‘.substring(4)); 2.規避javascript多人開發函數重名問題命名空間封閉空間js模塊化mvc(
前端面試基礎-html篇之H5新特性
-h 側邊欄 沒有 開發者 制作 article 廣告 隱藏 val h5的新特性(目前個人所了解)如下 語義化標簽 表單新特性 視頻(video)和音頻(audio) canvas畫布 svg繪圖 地理定位 為鼠標提供的拖放API webworker (重點)Stora
一篇文章搞定前端面試
ron miss 就是 節點數 網頁 那是 png html 性能優化 本文旨在用最通俗的語言講述最枯燥的基本知識 面試過前端的老鐵都知道,對於前端,面試官喜歡一開始先問些HTML5新增元素啊特性啊,或者是js閉包啊原型啊,或者是css垂直水平居中怎麽實現啊之類的基礎問題
前端面試之JS閉包
前端面試之JS閉包 面試回答: 什麼是閉包 :閉包就是在函式裡定義函式,而且內部函式可以引用外部函式的引數和區域性變數,當外部函式返回這個內部函式時,內部函式引用的引數和區域性變數儲存在內部函式裡 為什麼要用閉包:因為js的函式作用域的關係,一般情況下外部是訪問不了函式內部的變數的,
前端每週清單半年盤點之 Vue.js 篇
前端每週清單專注前端領域內容,以對外文資料的蒐集為主,幫助開發者瞭解一週前端熱點;分為新聞熱點、開發教程、工程實踐、深度閱讀、開源專案、巔峰人生等欄目。歡迎關注【前端之巔】微信公眾號(ID:frontshow),及時獲取前端每週清單;本文則是對於半年來發布的前端每週清單中的 Vue.js 相
前端面試絕對會考的JS問題!【已經開源】
寫在前面 【前端指南】前端面試庫已經開源,正在完善之中 [x] css問題 [x] html問題 [x] javascript問題 github地址 https://github.com/nanhupatar... JavaScript 的組成 JavaScript 由以下三
03-撩課大前端—面試寶典—第三篇
1. javascript的typeof返回哪些資料型別? 答案: undefined string boolean number symbol(ES6) Object Function 2. 列舉3種強制型別轉換和2種隱式型別轉換?
02-撩課大前端—面試寶典—第二篇
1.偽類與偽元素的區別? 1) 定義區別 偽類 偽類用於選擇DOM樹之外的資訊,或是不能用簡單選擇器進行表示的資訊。 前者包含那些匹配指定狀態的元素,比如:visited,:active;後者包含那些滿足一定邏輯條件的DOM樹中的元素,比如:first-child,:fi
05-撩課大前端-面試寶典-第五篇
1.寫一個深度克隆方法(es5)? /** * 深拷貝 * @param {object}fromObj 拷貝的物件 * @param {object}toObj 目標物件 */ function deepCopyObj2NewObj(fromObj, toObj) {
04-撩課大前端—面試寶典—第四篇
1. 如何實現瀑布流? 瀑布流佈局的原理: 1) 瀑布流佈局要求要進行佈置的元素等寬, 然後計算元素的寬度, 與瀏覽器寬度之比,得到需要佈置的列數; 2) 建立一個數組,長度為列數, 裡面的值為已佈置元素的總高度(最開始為0); 3) 然後將未佈置的元素依