js面试集锦

1、编写一个方法 求一个字符串的字节长度

JavaScript代码
编写一个方法 求一个字符串的字节长度
一个英文字符占用一个字节,一个中文字符占用两个字节
一个文字等于两个字符
    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);结果是?

 
    20   true   false

 

 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外可以访问。

posted @ 2013-04-25 21:44  cq-home  Views(377)  Comments(0Edit  收藏  举报