js面试集锦
1、编写一个方法 求一个字符串的字节长度
编写一个方法 求一个字符串的字节长度
一个英文字符占用一个字节,一个中文字符占用两个字节
一个文字等于两个字符
function getByte(str) {
var num = 0;
for (var i = 0, l = str.length; i < l; i++) {
if (str.charCodeAt(i) > 255) {
num += 2;
} else {
num++;
}
}
return num;
}
2、去掉字符串前后空格,中间空格保留
<script type="text/javascript">
function trim(str){ //删除左右两端的空格
return str.replace(/(^\s*)|(\s*$)/g, "");
}
function ltrim(str){ //删除左边的空格
return str.replace(/(^\s*)/g,"");
}
function rtrim(str){ //删除右边的空格
return str.replace(/(\s*$)/g,"");
}
</script>
3、javascript控制页面控件隐藏显示的两种方法
javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位
方法一:
document.all["PanelSMS"].style.visibility="hidden";
document.all["PanelSMS"].style.visibility="visible";
方法二:
document.all["PanelSMS"].style.display="none";
document.all["PanelSMS"].style.display="inline";
方法一隐藏后 页面的位置还被控件占用 只是不显示 类似于.net验证控件的Display=Static
方法二隐藏后 页面的位置不被占用 类似于.net验证控件的Display=Dynamic
4、var a = 10; var b = 20; var c = 10; alert(a = b); alert(a == b); alert(a == c);结果是?
5、如何控制alert中的换行
<script language="javascript" type="text/javascript">
alert("hello\nworld");<!-- 通过转义字符
// -->
</script>
6、说出3条以上ff和ie的脚本兼容问
IE有children,FF没有;IE有parentElement,FF没有;IE有innerText,outerText,outerHTML,FF没有;
FF有HTMLElement,HTMLDivElement,XMLDocument,DocumentFragment,Node,Event,Element等等,
IE没有;IE有数据岛,FF没有;IE跟FF创建HttpRequest实例的方法不一样。。等等。。
7、js中SetInterval与setTimeout用法?
延时时间/交互时间是以豪秒为单位的(1000ms=1s)
setTimeout 在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次
SetInterva 在执行时,它从载入后,每隔指定的时间就执行一次表达式
1)基本用法:
执行一段代码:
var i=0;
setTimeout("i+=1;alert(i)",1000);
执行一个函数:
var i=0;
setTimeout(function(){i+=1;alert(i);},1000);
下面再来一个执行函数的:
var i=0;
function test(){
i+=1;
alert(i);
}
setTimeout("test()",1000);
也可以这样:
setTimeout(test,1000);
2)<script type="text/javascript">
<!--
function sett()
{
document.body.innerHTML=Math.random();
}
setInterval("sett();", 500);
// -->
</script>
8、编写一个方法 去掉一个数组的重复元素
<script language="javascript" type="text/javascript">
Array.prototype.strip=function()
{
if(this.length<2) return [this[0]]||[];
var arr=[];
for(var i=0;i<this.length;i++)
{
arr.push(this.splice(i--,1));
for(var j=0;j<this.length;j++)
{
if(this[j]==arr[arr.length-1])
{
this.splice(j--,1);
}
}
}
return arr;
}
var arr=["abc",85,"abc",85,8,8,1,2,5,4,7,8];
alert(arr.strip());
</script>
9、按要求写一个简单的ajax示例
<html>
<head><title>loading</title></head>
<body>
<div id="load">数据正在加载......</div>
<script type="text/javascript">
var Browser={
/**
Browser对象用于检测浏览器,其中用到了IE的条件编译
*/
/*@cc_on
isIE:true,
@*/
isFF:window.navigator.appName.toUpperCase().indexOf("NETSCAPE")!=-1?true:false,
isOpera:window.navigator.appName.toUpperCase().indexOf("OPERA")!=-1?true:false
};
Function.prototype.bind=function(object)
{
var _this=this;
return function()
{
_this.apply(object,arguments);
}
}
function HttpRequest()
{
this.async=true;
this.cache=false;
this.xmlhttp=function()
{
if(Browser.isFF&&window.XMLHttpRequest)
{
try{
return new XMLHttpRequest();
}catch(e){}
}
else if(Browser.isIE&&window.ActiveXObject)
{
var Version = [
"Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0",
"Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP.2.6","Msxml2.XMLHTTP",
"Microsoft.XMLHTTP.1.0","Microsoft.XMLHTTP.1","Microsoft.XMLHTTP"
];
for(var i=0;i<Version.length;i++)
{
try{
return new ActiveXObject(Version[i]);
}catch(e){}
}
}
}()||false;
}
HttpRequest.prototype={
send:function(object,url,callback)
{
if(!this.xmlhttp) return;
this.xmlhttp.open(object?"post":"get",url,!!this.async);
if(object) this.xmlhttp.setRequestHeader("content-type","application/x-www-form-urlencoded");
if(!this.cache)
{
this.xmlhttp.setRequestHeader("No-Cache","1");
this.xmlhttp.setRequestHeader("Pragma","no-cache");
this.xmlhttp.setRequestHeader("Cache-Control","no-cache");
this.xmlhttp.setRequestHeader("Expire","0");
this.xmlhttp.setRequestHeader("Last-Modified","Wed, 1 Jan 1997 00:00:00 GMT");
this.xmlhttp.setRequestHeader("If-Modified-Since","-1");
}
if(!this.callback) this.callback=callback;
if(!this.async)
{
if(typeof(this.callback)=="string")
{
eval(this.callback);
}
else if(typeof(this.callback)=="function")
{
this.callback(this.xmlhttp);
}
}
else
{
this.xmlhttp.onreadystatechange=function()
{
if(this.xmlhttp.readyState==4)
{
if(this.xmlhttp.status==0||this.xmlhttp.status==200)
{
if(typeof(this.callback)=="string")
{
eval(this.callback);
}
else if(typeof(this.callback)=="function")
{
this.callback(this.xmlhttp);
}
}
}
}.bind(this);
}
this.xmlhttp.send(object);
},
abort:function()
{
if(this.xmlhttp&&this.xmlhttp.abort) this.xmlhttp.abort();
}
};
//ajax类定义结束
new HttpRequest().send(null,"http://bbs.51js.com/index.php",
function(r)
{
document.getElementById("load").innerHTML=r.responseText.match(/<img.*?(?:\/)?>/img).join("");
});
</script>
</body>
</html>
这是我写注册表单时用到的代码
<!--
function showCustomer(name){
var xmlhttp;
try{
xmlhttp= new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
try{
xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
try{
xmlhttp= new XMLHttpRequest();
}catch(e){}
}
}
xmlhttp.open("get","checkNewUser?username="+name+"&"+ new Date().getTime());
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4){
if(xmlhttp.status==200){
//根据responseText判断用户名是否存在
if(xmlhttp.responseText=="2"){
alert("对不起,用户名不能为空!");
document.getElementById("spanUser").innerHTML='<font color=red >重新输入用户名</font>';
document.all.sum.value="0";//向隐藏域写值,以便于提交时判断用户名是否在存在提示下进行了修改
}
else if(xmlhttp.responseText=="1"){
alert("对不起,用户名已经存在!");
document.getElementById("spanUser").innerHTML='<font color=red >此用户已存在</font>';
document.all.sum.value="0";//向隐藏域写值,以便于提交时判断用户名是否在存在提示下进行了修改
}
else{
alert("恭喜,该用户未被注册!");
document.getElementById("spanUser").innerHTML='<font color=red >用户名可以使用</font>';
document.all.sum.value="1";
}
}}
// else {alert("网络链接失败!");}
}
xmlhttp.send(null);
}
10、给基本类型数据添加属性,不报错,但取值时是undefined
a = 1 a.prop = 3
alert(a + a.prop) // NAN
变量a为数字3,给其添加prop属性,值为4(奇怪吧在JS中这是允许的,且不会有语法错误)。
然后alert出a+a.prop的结果。结果是NaN。a.prop为undefined,3+undefined为NAN。
举一反三,给字符串添加属性
a = "a"
a.prop = "d"
alert(a + a.prop) // aundefined
11、隐式的全局变量
var a = 1
function func() {
a = b = 2
}
func()
alert(a)
alert(b) // 2 2
JS中不用var声明的变量默认是全局变量,而这里的连等使的情况更加隐蔽。这里的b是全局的,因此func外可以访问。

浙公网安备 33010602011771号