1.截取字元串abcdace的acealert('abcdace'.substring(4)); 2.規避javascript多人開發函數重名問題命名空間封閉空間js模塊化mvc(數據層、表現層、控制層)seajs變數轉換成對象的屬性對象化 3.javascript面向對象中繼承實現function ...
1.截取字元串abcdace的ace
alert('abcdace'.substring(4));
2.規避javascript多人開發函數重名問題
命名空間
封閉空間
js模塊化mvc(數據層、表現層、控制層)
seajs
變數轉換成對象的屬性
對象化
3.javascript面向對象中繼承實現
function Person(name){
this.name = name;
}
Person.prototype.showName = function(){
alert(this.name);
}
function Worker(name, job){
Person.apply(this,arguments)
this.job = job;
}
for(var i in Person.prototype){
Worker.prototype = Person.prototype;
}
new Worker('sl', 'coders').showName();
4.判斷一個字元串中出現次數最多的字元,統計這個次數
var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1;
}else{
json[str.charAt(i)]++;
}
};
var iMax = 0;
var iIndex = '';
for(var i in json){
if(json[i]>iMax){
iMax = json[i];
iIndex = i;
}
}
alert('出現次數最多的是:'+iIndex+'出現'+iMax+'次');
5.編寫一個方法 求一個字元串的位元組長度;
//假設一個中文占兩個位元組
var str = '22兩是';
alert(getStrlen(str))
function getStrlen(str){
var json = {len:0};
var re = /[\u4e00-\u9fa5]/;
for (var i = 0; i < str.length; i++) {
if(re.test(str.charAt(i))){
json['len']++;
}
};
return json['len']+str.length;
}
6.編寫一個方法 去掉一個數組的重覆元素
var arr = [1,2,3,1,43,12,12,1];
var json = {};
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
if(!json[arr[i]]){
json[arr[i]] = true;
}else{
json[arr[i]] = false;
}
if(json[arr[i]]){
arr2.push(arr[i]);
}
};
for (var i = 0; i < arr.length; i++) {
if(!aa(arr[i], arr2)){
arr2.push(arr[i])
}
};
function aa(obj, arr){
for (var i = 0; i < arr.length; i++) {
if(arr[i] == obj) return true;
else return false;
};
}
alert(arr2)
7.寫出3個使用this的典型應用
事件: 如onclick this->發生事件的對象
構造函數 this->new 出來的object
call/apply 改變this
8.如何深度克隆
var arr = [1,2,43];
var json = {a:6,b:4,c:[1,2,3]};
var str = 'sdfsdf';
var json2 = clone(json);
alert(json['c'])
function clone(obj){
var oNew = new obj.constructor(obj.valueOf());
if(obj.constructor == Object){
for(var i in obj){
oNew[i] = obj[i];
if(typeof(oNew[i]) == 'object'){
clone(oNew[i]);
}
}
}
return oNew;
}
9.JavaScript中如何檢測一個變數是一個String類型?請寫出函數實現
typeof(obj) == 'string'
obj.constructor == String;
10.網頁中實現一個計算當年還剩多少時間的倒數計時程式,要求網頁上實時動態顯示“××年還剩××天××時××分××秒”
var oDate = new Date();
var oYear = oDate.getFullYear();
var oNewDate = new Date();
oNewDate.setFullYear(oYear, 11, 31, 23, 59, 59);
var iTime = oNewDate.getTime()-oDate.getTime();
var iS = iTime/1000;
var iM = oNewDate.getMonth()-oDate.getMonth();
var iDate =iS
11. 請解釋一下什麼是語義化的HTML。
內容使用特定標簽,通過標簽就能大概瞭解整體頁面的佈局分佈
12. 為什麼利用多個功能變數名稱來存儲網站資源會更有效?
確保用戶在不同地區能用最快的速度打開網站,其中某個功能變數名稱崩潰用戶也能通過其他鬱悶訪問網站
13.請說出三種減低頁面載入時間的方法
1、壓縮css、js文件
2、合併js、css文件,減少http請求
3、外部js、css文件放在最底下
4、減少dom操作,儘可能用變數替代不必要的dom操作
14.什麼是FOUC?你如何來避免FOUC?
由於css引入使用了@import 或者存在多個style標簽以及css文件在頁面底部引入使得css文件載入在html之後導致頁面閃爍、花屏
用link載入css文件,放在head標簽裡面
15.文檔類型的作用是什麼?你知道多少種文檔類型?
影響瀏覽器對html代碼的編譯渲染
html2.0
xHtml
html5
16.瀏覽器標準模式和怪異模式之間的區別是什麼?
盒模型解釋不同
17.閉包
子函數能被外部調用到,則該作用連上的所有變數都會被保存下來。
18.請解釋什麼是Javascript的模塊模式,並舉出實用實例。
js模塊化mvc(數據層、表現層、控制層)
seajs
命名空間
19.你如何組織自己的代碼?是使用模塊模式,還是使用經典繼承的方法?
對內:模塊模式
對外:繼承
20.你如何優化自己的代碼?
代碼重用
避免全局變數(命名空間,封閉空間,模塊化mvc..)
拆分函數避免函數過於臃腫
註釋
21.你能解釋一下JavaScript中的繼承是如何工作的嗎?
子構造函數中執行父構造函數,並用call\apply改變this
克隆父構造函數原型上的方法
22.請儘可能詳盡的解釋AJAX的工作原理。
創建ajax對象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))
判斷數據傳輸方式(GET/POST)
打開鏈接 open()
發送 send()
當ajax對象完成第四步(onreadystatechange)數據接收完成,判斷http響應狀態(status)200-300之間或者304(緩存)執行回調函數