前端js簡單的面試題
0,截取字符串a(chǎn)bcdefg中的efg
var str = 'abcdefg';
alert(str.substr(4,3));
1,js有哪些數(shù)據(jù)類型,數(shù)據(jù)類型的判斷函數(shù)?
String,Number,Boolean,Null,Undefined,Object
判斷函數(shù)有:typeof,instanceof,constructor,prototype
接下來我們一一對這些進(jìn)行舉例子。
var a = 'nihao';
var b = 222;
var c = [1,2,3];
var d = new Date();
var e = function(){alert('hanshu');};
var f = function(){this.name = 'hanmeimei'};
alert(typeof a);//string
alert(typeof a == String);// false
alert(typeof b);// number
alert(typeof c);// object
alert(typeof d);// object
alert(typeof e);// function
alert(typeof f);// function
alert(c instanceof Array);//true
alert(e instanceof Function);//true
alert(c.constructor === Array);//true
function A(){};
function B(){};
A.prototype = new B(); //A繼承自B注意: constructor 在類繼承時(shí)會出錯(cuò)
var aObj = new A();
alert(aObj.constructor === B);// -----------> true;
alert(aObj.constructor === A);// -----------> false;
//而instanceof方法不會出現(xiàn)該問題,對象直接繼承和間接繼承的都會報(bào)true:
alert(aObj instanceof B); //----------------> true;
alert(aObj instanceof A); //----------------> true;
//解決construtor的問題通常是讓對象的constructor手動指向自己:
aObj.constructor = A;//將自己的類賦值給對象的constructor屬性
alert(aObj.constructor === B);// -----------> flase;
alert(aObj.constructor === A);//true
//prototype
alert(Object.prototype.toString.call(a) === '[object String]');//true;
alert(Object.prototype.toString.call(b) === '[object Number]');//true;
alert(Object.prototype.toString.call(c) === '[object Array]');//true;
alert(Object.prototype.toString.call(d) === '[object Date]');//true;
alert(Object.prototype.toString.call(e) === '[object Function]');//true;
alert(Object.prototype.toString.call(f) === '[object Function]');//true;
2,編寫一個(gè)js函數(shù),時(shí)時(shí)顯示當(dāng)前時(shí)間,格式:“年-月-日 時(shí):分:秒”
function nowtime(){
var nowDate = new Date();
var year = nowDate.getFullYear();
var month = nowDate.getMonth() + 1;
var day = nowDate.getDate();
var hours = nowDate.getHours();
var minutes = nowDate.getMinutes();
var second = nowDate.getSeconds();
return year + '-' + month + '-' + day +' '+hours+':'+minutes +':'+second;
}
alert(nowtime());
3,顯示隱藏dom元素
使用jquery
$(function(){
$("#div").show();
$("#div").hide();
});
4,如果添加HTML元素的事件處理,幾種方法
a,直接元素中添加:
<a href="###" onclick="fn();" >click</a>
b,找到dom節(jié)點(diǎn)如:
var ob = document.getElementById("div");
ob.onclick = function(){};
c,使用jquery添加靜態(tài)的dom節(jié)點(diǎn)的事件
$("#div").click(function(){});
//動態(tài)生成的節(jié)點(diǎn)的話:
$("#div").on("click",function(){});
$("#div").live("click",function(){});
5,如何控制alert中的換行
alert('nihao\nnihao');或者
alert('nihao'+'\n'+'nihao');
6,判斷字符串中出現(xiàn)次數(shù)最多的字符,統(tǒng)計(jì)這個(gè)次數(shù)。
//判斷一個(gè)字符串中出現(xiàn)次數(shù)最多的字符,統(tǒng)計(jì)這個(gè)次數(shù)
//方法一
var str="aabbb";
var obj={};
for(var i=0,k;i<str.length;i++){
k=str.charAt(i);//charAt() 方法可返回指定位置的字符。
if(obj[k]){
obj[k]++;
}else{
obj[k]=1;
}
}
var m=0;
var i=null;
for(var k in obj){
if(obj[k]>m){
m=obj[k];
i=k;
}
}
alert(i+':'+m);
//方法二
var str ="aaaaaaaaaaabbb";
for(var i=0,len=0,temp="";i<str.length; i++){
var s=str.substr(i,1);//substr()方法可在字符串中抽取從 start 下標(biāo)開始的指定數(shù)目的字符。
var tt=str.split(s);//split()方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組。
if(tt.length>len){
len=tt.length;
temp=s+"出現(xiàn)最多次數(shù)為"+len;
}
}
alert(temp);
7,判斷字符串是否是這樣組成的,第一個(gè)必須是字母,后面可以是字母,數(shù)字,下劃線,總長度為5-20
有兩種方案,一種是傳統(tǒng)的遍歷每個(gè)字符來判斷,這種會比較麻煩。另一種是用正則來判斷比較方便。
下面是正則的例子
//判斷字符串是否是這樣組成的,第一個(gè)必須是字母,后面可以是字母、數(shù)字、下劃線,總長度為5-20
var str = 'abcdefg';
var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;
alert(reg.test(str));
8,寫一個(gè)字符串轉(zhuǎn)成駝峰的方法:
如:border-bottom-color 》 borderBottomColor
這個(gè)也是有兩種方法,一種是傳統(tǒng)的和一種正則表達(dá)式
var str = "border-bottom-color";
function test(str){
var arr = str.split("-");//用split()函數(shù)來進(jìn)行分割字符串a(chǎn)rr里面包括【border,bottom,color】
for(var i=1;i<arr.length;i++){//從數(shù)組的第二項(xiàng)開始循環(huán),charAt(0)找到第一個(gè)字母。substring(1)截掉第一個(gè)字母。
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);//循環(huán)之后把得到的字符賦給arr?!綽order,Bottom, Color】
alert(arr[i]);
}
return arr.join("");//用join方法來拼接,空拼接。就變成borderBottomColor
}
alert(test(str));
var str = "border-bottom-color";
function test(str){
var re = /-(\w)/g;//通過正則找到-b -c。默認(rèn)的是匹配一次,所以要用g來全局匹配。\w指的字符。找一個(gè)-找一個(gè)字符。replace替換就是B替換-b C替換-c。 $0代表正則,$1代表指向
return str.replace(re, function($0,$1){
return $1.toUpperCase();
});
}
alert(test(str));
9,請編寫一個(gè)javascript函數(shù)parseQueryString,他的用途是把URL參數(shù)解析為一個(gè)對象,如:
var url=“http:witmax,cn/index.php?key0=0&key1=1&key2=2”;
function parseQueryString(url) {
var json = {};
var arr = url.substr(url.indexOf('?') + 1,url.length).split('&');
arr.forEach(function(item) {
var tmp = item.split('=');
json[tmp[0]] = tmp[1];
})
return json;
}
//或者
function parseQueryString(url)
{
var obj={};
var keyvalue=[];
var key="",value="";
var paraString=url.substring(url.indexOf("?")+1,url.length).split("&");
for(var i in paraString){
keyvalue=paraString[i].split("=");
key=keyvalue[0];
value=keyvalue[1];
obj[key]=value;
}
return obj;
}
var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2";
var json = parseQueryString(url);
console.log(json);
本文地址:http://m.pkvc.cn/tutorial/wd2672.html