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

你可能感兴趣的:(js)