3月8日
1.填空題
- Javascript中, 如果已知HTML頁面中的某標簽對象的
id='username',用document.getElementById("username")___方法獲得該標簽對象。 - typeof運算符返回值中有一個跟javascript數(shù)據(jù)類型不一致,它是
function。 - 定義了一個變量,但沒有為該變量賦值,如果alert該變量,javascript彈出的對話框中顯示
undefined。
2.分析代碼,得出正確的結(jié)果。
var a=10,b=20,c=30;
++a;//11
a++;//12
e=++a+(++b)+(c++)+a++;//13+21+30+13
alert(e);//77
3. 寫出函數(shù)DateDemo的返回結(jié)果,系統(tǒng)時間假定為今天。
function DateDemo(){
var d, s="今天日期是:";
d = new Date();
s += d.getMonth() +1+ "/"; //今天日期是:3/
s += d.getDate() + "/"; //今天日期是:3/8/
s += d.getFullYear(); //今天日期是:3/8/2017
return s;
}
今天日期是:3/8/2017
4. 寫出程序運行的結(jié)果?
for (i = 0, j = 0; i < 10, j < 6; i++, j++) {
k = i + j;
}
console.log(k); //10
5+5=10
5. 閱讀以下代碼,請分析出結(jié)果。
var arr = new Array(1 ,3 ,5);
arr[4]='z'; //[1,3,5,,'z']
arr2 = arr.reverse(); //['z',,5,3,1]
arr3 = arr.concat(arr2);//['z',,5,3,1,'z',,5,3,1]
alert(arr3);
['z',,5,3,1,'z',,5,3,1]
6.補充按鈕事件的函數(shù),確認用戶是否退出當前頁面,確認之后關(guān)閉窗口?
<html>
<head>
<script type='text/javascript'>
function closeWin(){
//在此處添加代碼
if(confirm('確定要退出嗎?')){
window.close();
}
}
</script>
</head>
<body>
<input type='button' value='關(guān)閉窗口' onclick='closeWin()'/>
</body>
</html>
7.寫出簡單描述html標簽(不帶屬性的開始標簽和結(jié)束標簽)的正則表達式,并將以下字符串中的html標簽去除掉。
var str = '<div>這里是div<p>里面的段落</p></div>';
<script type='text/javascript'>
var reg = /<\/?\w+\/?>/gi;
var str = '<div>這里是div<p>里面的段落</p></div>';
alert(str.replace(reg,''));
</script>
8. 完成foo()函數(shù)的內(nèi)容,要求能夠彈出對話框提示當前選中的是第幾個單選框。
<html>
<head>
<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
</head>
<script type='text/javascript'>
function foo() {
//在此處添加代碼
var rdo = document.form1.radioGroup;
for (var i = 0; i < rdo.length; i++) {
if (rdo.checked) {
alert('您選擇的是第' + (i + 1) + '個單選框');
}
}
}
</script>
<body>
<form name='form1'>
<input type='radio' name='radioGroup'/>
<input type='radio' name='radioGroup'/>
<input type='radio' name='radioGroup'/>
<input type='radio' name='radioGroup'/>
<input type='submit'/>
</form>
</body>
</html>
9. 完成函數(shù)showImg(),要求能夠動態(tài)根據(jù)下拉列表的選項變化,更新圖片的顯示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type='text/javascript'>
function showImg(oSel) {
//在此處添加代碼
var str = oSel.value;
document.getElementById('pic').src = str + '.jpg';
}
</script>
</head>
<body>

<br/>
<select id='sel'>
<option value='img1'>城市生活</option>
<option value='img2'>都市早報</option>
<option value='img3'>青山綠水</option>
</select>
</body>
</html>
10. 截取字符串a(chǎn)bcdefg的efg
alert('abcdefg'.substring(4));
11. 列舉瀏覽器對象模型BOM里常用的至少4個對象,并列舉window對象的常用方法至少5個。
- 對象:window,document,location,screen,history,navigator
- 方法:alert(),confirm(),prompt(),open(),close()
12. 簡述列舉文檔對象模型DOM里document的常用的查找訪問節(jié)點的方法并做簡單說明。
Document.getElementById //根據(jù)元素id查找元素
Document.getElementByName //根據(jù)元素name查找元素
Document.getElementTagName //根據(jù)指定的元素名查找元素
13. 希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)
var domList = document.getElementsByTagName('input')
var checkBoxList = [];
var len = domList.length; //緩存到局部變量
while (len--) { //使用while的效率會比for循環(huán)更高
if (domList[len].type == 'checkbox') {
checkBoxList.push(domList[len]);
}
}
14. 簡述創(chuàng)建函數(shù)的幾種方式。
//第一種(函數(shù)聲明):
function sum1(num1,num2){
return num1+num2;
}
//第二種(函數(shù)表達式):
var sum2 = function(num1,num2){
return num1+num2;
}
//第三種(函數(shù)對象方式):
var sum3 = new Function("num1","num2","return num1+num2");
15. Javascript如何實現(xiàn)繼承?
- 構(gòu)造繼承法
- 原型繼承法
- 實例繼承法
3月9日
1. Javascript創(chuàng)建對象的幾種方式?
1、var obj = {};(使用json創(chuàng)建對象)
2、var obj = new Object();(使用Object創(chuàng)建對象)
3、通過函數(shù)創(chuàng)建對象。
(1)、使用this關(guān)鍵字,如:
var obj = function (){
this.name ='張三';
this.age = 19;
this.action = function () {
alert('吃飯');
};
}
(2)、使用prototype關(guān)鍵字,如:
function obj (){}
obj.prototype.name ='張三';
obj.prototype.action=function () {
alert('吃飯');
};
4、通過Window創(chuàng)建對象。如:
window.name = '張三';
window.age = 19;
window.action= function() {
alert('吃飯');
};
5、使用內(nèi)置對象創(chuàng)建對象。如:
var str = new String("實例初始化String");
var str1 = "直接賦值的String";
var func = new Function("x","alert(x)");//示例初始化func
var obj = new Object();//示例初始化一個Object
2. iframe的優(yōu)缺點?
- 優(yōu)點:
- 解決加載緩慢的第三方內(nèi)容如圖標和廣告等的加載問題
- Security sandbox
- 并行加載腳本
- 缺點:
- iframe會阻塞主頁面的Onload事件
- 即時內(nèi)容為空,加載也需要時間
- 沒有語意
3. 請你談?wù)凜ookie的弊端?
- Cookie數(shù)量和長度的限制。每個domain最多只能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。
- 安全性問題。如果cookie被人攔截了,那人就可以取得所有的session信息。即使加密也與事無補,因為攔截者并不需要知道cookie的意義,他只要原樣轉(zhuǎn)發(fā)cookie就可以達到目的了。
- 有些狀態(tài)不可能保存在客戶端。例如,為了防止重復(fù)提交表單,我們需要在服務(wù)器端保存一個計數(shù)器。如果我們把這個計數(shù)器保存在客戶端,那么它起不到任何作用。
4. js延遲加載的方式有哪些?
- defer和async
- 動態(tài)創(chuàng)建DOM方式(創(chuàng)建script,插入到DOM中,加載完畢后callBack)
- 按需異步載入js
5.documen.write和 innerHTML 的區(qū)別?
- document.write 只能重繪整個頁面
- innerHTML 可以重繪頁面的一部分
6. 哪些操作會造成內(nèi)存泄漏?
內(nèi)存泄漏指任何對象在您不再擁有或需要它之后仍然存在。
垃圾回收器定期掃描對象,并計算引用了每個對象的其他對象的數(shù)量。如果一個對象的引用數(shù)量為 0(沒有其他對象引用過該對象),或?qū)υ搶ο蟮奈┮灰檬茄h(huán)的,那么該對象的內(nèi)存即可回收。
- setTimeout 的第一個參數(shù)使用字符串而非函數(shù)的話,會引發(fā)內(nèi)存泄漏。
- 閉包
- 控制臺日志
- 循環(huán)(在兩個對象彼此引用且彼此保留時,就會產(chǎn)生一個循環(huán))
7. 判斷一個字符串中出現(xiàn)次數(shù)最多的字符,統(tǒng)計這個次數(shù)。
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('出現(xiàn)次數(shù)最多的是:'+iIndex+'出現(xiàn)'+iMax+'次');
8.寫一個獲取非行間樣式的函數(shù)。
function getStyle(obj,attr,value)
{
if(!value)
{
if(obj.currentStyle)
{
return obj.currentStyle(attr);
}
else{
obj.getComputedStyle(attr,false);
}
}
else
{
obj.style[attr] = value;
}
}
9. 事件委托是什么?
讓利用事件冒泡的原理,讓自己的所觸發(fā)的事件,讓他的父元素代替執(zhí)行。
10. 閉包是什么,有什么特性,對頁面有什么影響?
我的理解是,閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。
functionouter(){
varnum=1;
functioninner(){
varn=2;
alert(n+num);
}
returninner;
}
outer()();
11. 解釋jsonp的原理,以及為什么不是真正的ajax。
- 動態(tài)創(chuàng)建script標簽,回調(diào)函數(shù)
- Ajax是頁面無刷新請求數(shù)據(jù)操作
12.字符串反轉(zhuǎn),如將 '12345678' 變成 '87654321'。
//思路:先將字符串轉(zhuǎn)換為數(shù)組split(),利用數(shù)組的反序函數(shù)reverse()顛倒數(shù)組,再利用jion()轉(zhuǎn)換為字符串
varstr='12345678';
str=str.split('').reverse().join('');
13. 將數(shù)字 12345678 轉(zhuǎn)化成 RMB形式 如:12,345,678。
//思路:先將數(shù)字轉(zhuǎn)為字符,str=str+'';
//利用反轉(zhuǎn)函數(shù),每三位字符加一個','最后一位不加;re()是自定義的反轉(zhuǎn)函數(shù),最后再反轉(zhuǎn)回去!
function re(str) {
str += '';
return str.split("").reverse().join("");
}
function toRMB(num) {
var tmp='';
for (var i = 1; i <= re(num).length; i++) {
tmp += re(num)[i - 1];
if (i % 3 == 0 && i != re(num).length) {
tmp += ',';
}
}
return re(tmp);
}
14. 生成5個不同的隨機數(shù)。
//思路:5個不同的數(shù),每生成一次就和前面的所有數(shù)字相比較,如果有相同的,則放棄當前生成的數(shù)字!
varnum1 = [];
for (vari = 0; i < 5; i++) {
num1[i] = Math.floor(Math.random() * 10) + 1;//范圍是[1,10]
for (varj = 0; j < i; j++) {
if (num1[i] == num1[j]) {
i--;
}
}
}
15. 去掉數(shù)組中重復(fù)的數(shù)字。
//思路:每遍歷一次就和之前的所有做比較,不相等則放入新的數(shù)組中!
//方法一
Array.prototype.unique = function () {
varlen = this.length,
newArr = [],
flag = 1;
for (vari = 0; i < len; i++, flag = 1) {
for (varj = 0; j < i; j++) {
if (this[i] == this[j]) {
flag = 0;//找到相同的數(shù)字后,不執(zhí)行添加數(shù)據(jù)
}
}
flag ? newArr.push(this[i]) : '';
}
returnnewArr;
}
//方法二
var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
Array.prototype.unique2 = function()
{
var n = []; //一個新的臨時數(shù)組
for(var i = 0; i < this.length; i++) //遍歷當前數(shù)組
{
//如果當前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組,那么跳過,
//否則把當前項push到臨時數(shù)組里面
if (n.indexOf(this[i]) == -1) n.push(this[i]);
}
return n;
}
var newArr2=arr.unique2(arr);
alert(newArr2); //輸出1,2,3,4,5,6,9,25
3月10日
1. 階乘函數(shù)。
//原型方法
Number.prototype.N=function(){
varre=1;
for(vari=1;i<=this;i++){
re*=i;
}
returnre;
}
varnum=5;
alert(num.N());
2.window.location.search() 返回的是什么?
查詢(參數(shù))部分。除了給動態(tài)語言賦值以外,我們同樣可以給靜態(tài)頁面,并使用javascript來獲得相信應(yīng)的參數(shù)值
返回值:?ver=1.0&id=timlq 也就是問號后面的!
3.window.location.hash返回的是什么?
錨點。返回值:#love 。
4.window.location.reload() 作用?
刷新當前頁面。
5. javascript 中的垃圾回收機制?
在Javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收。如果兩個對象互相引用,而不再 被第3者所引用,那么這兩個互相引用的對象也會被回收。因為函數(shù)a被b引用,b又被a外的c引用,這就是為什么 函數(shù)a執(zhí)行后不會被回收的原因。
6. 以下函數(shù)輸出什么?
functionf1(){
vartmp=1;
this.x=3;
console.log(tmp); //1
console.log(this.x); //3
}
varobj=newf1();
console.log(obj.x); //3
console.log(f1()); //1 3 undefined
7.以下代碼輸出什么?
varo1=newObject();
varo2=o1;
o2.name="CSSer";
console.log(o1.name); //CSSer
8.以下代碼輸出什么?
functionchangeObjectProperty(o){
o.siteUrl="http://www.csser.com/";
o=newObject();
o.siteUrl="http://www.popcg.com/";
}
varCSSer=newObject();
changeObjectProperty(CSSer);
console.log(CSSer.siteUrl); //http://www.csser.com/
在函數(shù)內(nèi)部修改了引用類型值的參數(shù),該參數(shù)值的原始引用保持不變。我們可以把參數(shù)想象成局部變量,當參數(shù)被重寫時,這個變量引用的就是一個局部變量,局部變量的生存期僅限于函數(shù)執(zhí)行的過程中,函數(shù)執(zhí)行完畢,局部變量即被銷毀以釋放內(nèi)存。
9. a輸出多少?
vara=6;
setTimeout(function(){
vara=666;
alert(a); //666
},1000);
全局變量處在作用域末端,優(yōu)先訪問了局部變量,從而覆蓋了全局變量 。
vara=6;
setTimeout(function(){
alert(a); //輸出undefined
vara=666;
},1000);
變量聲明提升,但賦值沒有提升,輸出undefined。
vara=6;
setTimeout(function(){
alert(a); //undefined
vara=66;
},1000);
a=666;
alert(a);//666(先彈出)
10. 以下代碼輸出什么?
functionsetN(obj){
obj.name='屌絲';
obj=newObject();
obj.name='腐女';
};
varper=newObject();
setN(per);
alert(per.name);//屌絲
11. 以下代碼輸出什么?
window.color='red';
varo={color:'blue'};
functionsayColor(){
alert(this.color);
}
sayColor(); //red
sayColor.call(this); //redthis-window對象
sayColor.call(window); //red
sayColor.call(o); //blue
12. JS精度問題。
varn=0.3,m=0.2,i=0.2,j=0.1;
alert((n-m)==(i-j));//false
alert((n-m)==0.1);//false
alert((i-j)==0.1);//true
13. 為什么不能定義1px左右的div容器?
IE6下這個問題是因為默認的行高造成的,解決的方法也有很多,例如:
overflow:hidden|zoom:0.08|line-height:1px
14. 以下代碼輸出什么?
functionfoo(){
foo.a=function(){alert(1)};
this.a=function(){alert(2)};
a=function(){alert(3)};
vara=function(){alert(4)};
};
foo.prototype.a=function(){alert(5)};
foo.a=function(){alert(6)};
foo.a(); //6
varobj=newfoo();
obj.a(); //2
foo.a(); //1
15. 以下代碼輸出什么?
vara=5;
functiontest(){
a=0;
alert(a);
alert(this.a);
vara;
alert(a)
}
test();//0,5,0
newtest();//0,undefined,0//由于類它自身沒有屬性a,所以是undefined
3月11日
1. 計算字符串字節(jié)數(shù)。
newfunction(s){
if(!arguments.length||!s)returnnull;
if(""==s)return0;
varl=0;
for(vari=0;i<s.length;i++){
if(s.charCodeAt(i)>255)l+=2;elsel+=1;//charCodeAt()得到的是unCode碼
}//漢字的unCode碼大于255bit就是兩個字節(jié)
alert(l);
}("helloworld!");
2. 以下代碼的輸出結(jié)果是什么?
varbool=!!2;
alert(bool); //true;
雙向非操作可以把字符串和數(shù)字轉(zhuǎn)換為布爾值。
3. 聲明對象,添加屬性,輸出屬性。
varobj={
name:'leipeng',
showName:function(){
alert(this.name);
}
}
obj.showName();
4. 匹配輸入的字符:第一個必須是字母或下劃線開頭,長度5-20。
varreg=/^[a-zA-Z_][a-zA-Z0-9_]{5,20}/,
name1='leipeng',
name2='0leipeng',
name3='你好leipeng',
name4='hi';
alert(reg.test(name1));
alert(reg.test(name2));
alert(reg.test(name3));
alert(reg.test(name4));
5. 如何在HTML中添加事件,有幾種方法?
- 標簽之中直接添加
onclick="fun()"; - JS添加
Eobj.onclick = method; - 現(xiàn)代事件
- IE:
obj.attachEvent('onclick', method); - FF:
obj.addEventListener('click', method, false);
- IE:
6.BOM對象有哪些,列舉window對象?
- window對象 ,是JS的最頂層對象,其他的BOM對象都是window對象的屬性;
- document對象,文檔對象;
- location對象,瀏覽器當前URL信息;
- navigator對象,瀏覽器本身信息;
- screen對象,客戶端屏幕信息;
- history對象,瀏覽器訪問歷史信息;
7.JS中的簡單繼承 call方法。
//頂一個父母類,注意:類名都是首字母大寫的哦!
functionParent(name,money){
this.name=name;
this.money=money;
this.info=function(){
alert('姓名:'+this.name+'錢:'+this.money);
}
}
//定義孩子類
functionChildren(name){
Parent.call(this,name);//繼承姓名屬性,不要錢。
this.info=function(){
alert('姓名:'+this.name);
}
}
//實例化類
varper=newParent('parent',800000000000);
varchi=newChildren('child');
per.info();
chi.info();
8.bind(), live(), delegate()的區(qū)別?
- bind: 綁定事件,對新添加的事件不起作用,方法用于將一個處理程序附加到每個匹配元素的事件上并返回jQuery對象。
- live: 方法將一個事件處理程序附加到與當前選擇器匹配的所有元素(包含現(xiàn)有的或?qū)硖砑拥模┑闹付ㄊ录喜⒎祷豭Query對象。
- delegate: 方法基于一組特定的根元素將處理程序附加到匹配選擇器的所有元素(現(xiàn)有的或?qū)淼模┑囊粋€或多個事件上。
9. 下列代碼輸出什么?
var foo = "11"+2-"1";
console.log(foo); //111
console.log(typeof foo); //Number
10. 下列代碼輸出什么?
var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value); //2
11. 如何優(yōu)化代碼?
- 代碼重用
- 避免全局變量(命名空間,封閉空間,模塊化mvc..)
- 拆分函數(shù)避免函數(shù)過于臃腫
- 注釋
12. 下列代碼輸出什么?
function d(){
console.log(this);
}
d(); //輸出window對象
13. 怎樣實現(xiàn)兩欄等高?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="container" style="display: table;width: 100%;">
<div id="left" style="background-color: red;display: table-cell;">
內(nèi)容<br/>
內(nèi)容<br/>
內(nèi)容<br/>
內(nèi)容<br/>
內(nèi)容<br/>
內(nèi)容<br/>
</div>
<div style="display:table-cell;"></div>
<div id="right" style="background-color: blue;display: table-cell">
內(nèi)容
</div>
</div>
</body>
</html>
14.使用js實現(xiàn)這樣的效果:在文本域里輸入文字時,當按下enter鍵時不換行,而是替換成“{{enter}}”,(只需要考慮在行尾按下enter鍵的情況)
<html>
<head>
<script>
function back(ele,event){
event = event || window.event;
if(event.keyCode==13){
event.returnValue = false;
ele.value+="{{enter}}"
return false;
}
}
</script>
</head>
<body>
<textarea rows="3" cols="40" id="te" onkeypress="back(this,event);"></textarea>
</body>
</html>
15. 以下代碼中end字符串什么時候輸出?
var t=true;
setTimeout(function(){
console.log(123);
t=false;
},1000);
while(t){} //死循環(huán)
console.log('end'); //永遠不輸出
3月12日
1.specify('hello,world')//=>'h,e,l,l,o,w,o,r,l,d',實現(xiàn)specify函數(shù)。
function specify(str){
var tempArray = Array.prototype.filter.call(str,function(value,index,array){
return value >= 'A' && value <= 'z' && value != "_";
});
return tempArray.join(",");
}
console.log(specify("hello,World")); //h,e,l,l,o,W,o,r,l,d
2.請將一個URL的search部分參數(shù)與值轉(zhuǎn)換成一個json對象。
aaa
3. 簡述readyonly與disabled的區(qū)別。
ReadOnly和Disabled的作用是使用戶不能夠更改表單域中的內(nèi)容。
但是二者還是有著一些區(qū)別的:
- Readonly只針對input(text/password)和textarea有效,而disabled對于所有的表單元素有效,包括select,radio,checkbox,button等。
- 在表單元素使用了disabled后,我們將表單以POST或者GET的方式提交的話,這個元素的值不會被傳遞出去,而readonly會將該值傳遞出去
4. 請盡可能詳盡的解釋ajax的工作原理。
Ajax的工作原理相當于在用戶和服務(wù)器之間加了—個中間層,使用戶操作與服務(wù)器響應(yīng)異步化。這樣把以前的一些服務(wù)器負擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負擔(dān),從而達到節(jié)約ISP的空間及帶寬租用成本的目的。
簡單來說通過XmlHttpRequest對象來向服務(wù)器發(fā)異步請求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來操作DOM而更新頁面。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請求數(shù)據(jù)。要清楚這個過程和原理,我們必須對XMLHttpRequest有所了解。
5. 為什么擴展javascript內(nèi)置對象不是好的做法?
因為你不知道哪一天瀏覽器或javascript本身就會實現(xiàn)這個方法,而且和你擴展的實現(xiàn)有不一致的表現(xiàn)。到時候你的javascript代碼可能已經(jīng)在無數(shù)個頁面中執(zhí)行了數(shù)年,而瀏覽器的實現(xiàn)導(dǎo)致所有使用擴展原型的代碼都崩潰了。。。?
6. 什么是三元表達式?“三元”表示什么意思?
三元運算符:三元如名字表示的三元運算符需要三個操作數(shù)。
語法是條件 ? 結(jié)果1 : 結(jié)果2;. 這里你把條件寫在問號(?)的前面后面跟著用冒號(:)分隔的結(jié)果1和結(jié)果2。滿足條件時結(jié)果1否則結(jié)果2。
7.HTTP協(xié)議中,GET和POST有什么區(qū)別?分別適用什么場景?
aaa
8.HTTP狀態(tài)消息200 302 304 403 404 500分別表示什么?
- 200:
9.HTTP協(xié)議中,header信息里面,怎么控制頁面失效時間(last-modified,cache-control,Expires分別代表什么)
aaa
10.HTTP雷鋒議目前常用的有哪幾個?KEEPALIVE從哪個版本開始出現(xiàn)的?
aaa
11. 業(yè)界常用的優(yōu)化WEB頁面加載速度的方法(可以分別從頁面元素展現(xiàn),請求連接,css,js,服務(wù)器等方面介紹)
aaa
12.列舉常用的web頁面開發(fā),調(diào)試以及優(yōu)化工具。
aaa
13.解釋什么是sql注入,xss漏洞。
aaa
14.請列舉js數(shù)組類型中的常用方法。
- aaa
15.FF與IE中如何阻止事件冒泡,如何獲取事件對象,以及如何獲取觸發(fā)事件的元素。
functionstopPropagation(e){
e=e||window.event;
if(e.stopPropagation){//W3C阻止冒泡方法
e.stopPropagation();
}else{
e.cancelBubble=true;//IE阻止冒泡方法
}
}
document.getElementById('need_hide').onclick=function(e){
stopPropagation(e);
}
3月13日
1.列舉常用的js框架以及分別適用的領(lǐng)域。
- jquery
2.js中如何實現(xiàn)一個map?
aaa
3.js可否實現(xiàn)面向?qū)ο缶幊蹋绻梢匀绾螌崿F(xiàn)js對象的繼承?
aaa
4.約瑟夫環(huán)—已知n個人(以編號1,2,3…分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數(shù),數(shù)到m的那個人出列;他的下一個人又從1開始報數(shù),數(shù)到m的那個人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。
aaa
5.有1到10w這個10w個數(shù),去除2個并打亂次序,如何找出那兩個數(shù)?
aaa
6.如何獲取對象a擁有的所有屬性(可枚舉的、不可枚舉的,不包括繼承來的屬性)
aaa
7.有下面這樣一段HTML結(jié)構(gòu),使用css實現(xiàn)效果。
實現(xiàn)效果:左邊容器無論寬度如何變動,右邊容器都能自適應(yīng)填滿父容器剩余的寬度。
<div class=”warp”>
<div class=”left”></div>
<div class=”right”></div>
</div>
aaa
8. 下面這段代碼想要循環(huán)輸出結(jié)果01234,請問輸出結(jié)果是否正確,如果不正確,請說明為什么,并修改循環(huán)內(nèi)的代碼使其輸出正確結(jié)果。
for(var i=0;i<5;++i){
setTimeout(function(){
console.log(i+’’);
},100*i);
}
9. 以下哪些是javascript的全局函數(shù):(ABC)
A. escape 函數(shù)可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。ECMAScript v3 反對使用該方法,應(yīng)用使用 decodeURI() 和 decodeURIComponent() 替代它。
B. parseFloat parseFloat() 函數(shù)可解析一個字符串,并返回一個浮點數(shù)。
該函數(shù)指定字符串中的首個字符是否是數(shù)字。如果是,則對字符串進行解析,直到到達數(shù)字的末端為止,然后以數(shù)字返回該數(shù)字,而不是作為字符串。
C. eval 函數(shù)可計算某個字符串,并執(zhí)行其中的的 JavaScript 代碼。
D. setTimeout
E. alert
10. 關(guān)于IE的window對象表述正確的有:(ACD)
A. window.opener屬性本身就是指向window對象
B. window.reload()方法可以用來刷新當前頁面 應(yīng)該是location.reload或者window.location.reload
C. window.location=”a.html”和window.location.href=”a.html”的作用都是把當前頁面替換成a.html頁面
D. 定義了全局變量g;可以用window.g的方式來存取該變量
11. 下面正確的是:(A)
A: 跨域問題能通過JsonP方案解決
B:不同子域名間僅能通過修改window.name解決跨域,還可以通過script標簽src jsonp等h5 Java split等
C:只有在IE中可通過iframe嵌套跨域
D:MediaQuery屬性是進行視頻格式檢測的屬性是做響應(yīng)式的
12. 錯誤的是:(C)
A: Ajax本質(zhì)是XMLHttpRequest
B: 塊元素實際占用的寬度與它的width、border、padding屬性有關(guān),與background無關(guān)
C: position屬性absolute、fixed、---relative---會使文檔脫標
D: float屬性left也會使div脫標
13. 不用任何插件,如何實現(xiàn)一個tab欄切換?
aaa
14. 變量的命名規(guī)范以及命名推薦。
變量,函數(shù),方法:小寫開頭,以后的每個單詞首字母大寫 (駝峰)
構(gòu)造函數(shù),class:每個單詞大寫開頭
基于實際情況,以動詞,名詞,謂詞來命名。盡量言簡意駭,以命名代替注釋
15. 三種彈窗的單詞以及三種彈窗的功能?
1.alert
//彈出對話框并輸出一段提示信息
function ale() {
//彈出一個對話框
alert("提示信息!");
}
2.confirm
//彈出一個詢問框,有確定和取消按鈕
function firm() {
//利用對話框返回的值 (true 或者 false)
if (confirm("你確定提交嗎?")) {
alert("點擊了確定");
}
else {
alert("點擊了取消");
}
}
3.prompt
//彈出一個輸入框,輸入一段文字,可以提交
function prom() {
var name = prompt("請輸入您的名字", ""); //將輸入的內(nèi)容賦給變量 name ,
//這里需要注意的是,prompt有兩個參數(shù),前面是提示的話,后面是當對話框出來后,在對話框里的默認值
if (name)//如果返回的有內(nèi)容
{
alert("歡迎您:" + name)
}
}
3月14日
1.只允許使用+ - \* / 和 Math.*,求一個函數(shù)y = f(x, a, b);當x > 100 時返回 a 的值,否則返回 b 的值,不能使用if else 等條件語句,也不能使用|,?:,數(shù)組。
function f(x, a, b) {
var temp = Math.ceil(Math.min(Math.max(x - 100, 0), 1));
return a * temp + b * (1 - temp);
}
console.log(f(-10, 1, 2));
2.JavaScriptalert(0.4*0.2);結(jié)果是多少?和你預(yù)期的一樣嗎?如果不一樣該如何處理?
有誤差,應(yīng)該比準確結(jié)果偏大。 一般我會將小數(shù)變?yōu)檎麛?shù)來處理。當前之前遇到這個問題時也上網(wǎng)查詢發(fā)現(xiàn)有人用try catch return寫了一個函數(shù),當然原理也是一致先轉(zhuǎn)為整數(shù)再計算。
3.一個div,有幾種方式得到這個div的jQuery對象?<div class='aabbcc' id='nodesView'></div>想直接獲取這個div的dom對象,如何獲取?dom對象如何轉(zhuǎn)化為jQuery對象?
$('#nodesView') , $('.aabbcc') ,$('#nodesView')[0] , $('.aabbcc')[0]
4.如何顯示/隱藏一個dom元素?請用原生的JavaScript方法實現(xiàn)。
aaa
5.jQuery框架中$.ajax()的常用參數(shù)有哪些?寫一個post請求并帶有發(fā)送數(shù)據(jù)和返回數(shù)據(jù)的樣例。
- async是否異步
- url請求地址
- contentType發(fā)送信息至服務(wù)器時內(nèi)容編碼類型
- data發(fā)送到服務(wù)器的數(shù)據(jù)
- dataType預(yù)期服務(wù)器返回的數(shù)據(jù)類型
- type請求類型
- success請求成功回調(diào)函數(shù)
- error請求失敗回調(diào)函數(shù)
$.ajax({
url: "/jquery/test1.txt",
type: 'post',
data: {
id: 1
},
success: function (data) {
alert(data);
}
}
6.閉包:下面這個ul,如何點擊每一列的時候alert其index?
<ul id="test">
<li>這是第一條</li>
<li>這是第二條</li>
<li>這是第三條</li>
</ul>
window.onload = function () {
var lis = document.getElementById('test').children;
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = (function (i) {
return function () {
alert(i)
};
})(i);
}
};
7.列出3條以上ff和IE的腳本兼容問題。
window.event:
表示當前的事件對象,IE有這個對象,F(xiàn)F沒有,F(xiàn)F通過給事件處理函數(shù)傳遞事件對象-
獲取事件源
IE用srcElement獲取事件源,而FF用target獲取事件源。
-
添加,去除事件
IE:
element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function)
FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true) -
獲取標簽的自定義屬性
IE:
div1.value或div1[“value”]
FF:可用div1.getAttribute(“value”)
8.用正則表達式,寫出由字母開頭,其余由數(shù)字、字母、下劃線組成的6~30的字符串?
^[a-zA-Z]{1}[\w]{5,29}$
9. 列舉瀏覽器對象模型BOM里常用的至少4個對象,并列舉window對象的常用方法至少5個。
- 對象:Window document location screen history navigator
- 方法:Alert() confirm() prompt() open() close()
10. 在Javascript中什么是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標準數(shù)組?
偽數(shù)組(類數(shù)組):無法直接調(diào)用數(shù)組方法或期望length屬性有什么特殊的行為,但仍可以對真正數(shù)組遍歷方法來遍歷它們。典型的是函數(shù)的argument參數(shù),還有像調(diào)用
getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬于偽數(shù)組??梢允褂?code>Array.prototype.slice.call(fakeArray)將數(shù)組轉(zhuǎn)化為真正的Array對象。
11. 寫一個函數(shù)可以計算 sum(5,0,-5);輸出0; sum(1,2,3,4);輸出10。
function sum() {
var result = 0;
var arr = arguments;
for (var i = 0; i < arr.length; i++) {
var num = arguments[i];
if (typeof num == 'number') {
result += num;
};
};
return result;
}
12.寫出正確的正則表達式匹配固話號,區(qū)號3-4位,第一位為0,中橫線,7-8位數(shù)字,中橫線,3-4位分機號格式的固話號。
^[0]\d{2,3}\-\d{7,8}\-\d{3,4}$
13. 寫出代碼對下列數(shù)組去重并從大到小排列{5,2,3,6,8,6,5,4,7,1,9}
function fn(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (i = 0; i < arr.length; i++) {
var c = arr[i];
for (var s = i + 1; s < arr.length; s++) {
if (arr[s] == c) {
//debugger;
arr.splice(s, 1);
s--;
}
}
}
return arr;
}
console.log(fn([5, 2, 3, 6, 8, 6, 5, 4, 7, 1, 9]).toString());
14. 統(tǒng)計1到400億之間的自然數(shù)中含有多少個1?比如1-21中,有1、10、11、21這四個自然數(shù)有5個1。
aaa
15. 刪除與某個字符相鄰且相同的字符,比如fdaffdaaklfjklja字符串處理之后成為“fdafdaklfjklja”。
aaa