js面试问题

一、JS闭包。
f = function() {return true;};  
g = function() {return false;};  
(function() {  
   if (g() && [] == ![]) {  
      f = function f() {return false;};  
      function g() {return true;}  
   }  
})();  
alert(f()); // true or false ? 
------------------------
答案:
(function() {    
   if (g() && [] == ![]) {    
//应该看成if((g() && [] )== ![])  
//因为g()是false后面那个&&[]就没起作用 整个都是false   
//![]也是false 所以if成立 进入if块内  
      f = function f() {return false;};    
//重新定义f   
      function g() {return true;}    
//这句没用  
   }    
})();   
alert(f());  
//false 

二、截取字符串abcdefg的efg
abcdefg
    <script type="text/javascript">
  var mytext=document.getElementByIdx_x_x("text");
  var myvalue=mytext.innerHTML;
  var jiequ=myvalue.substring(myvalue.length-3,myvalue.length);
  alert(jiequ)
</script>

三、写出一下运算结果
alert(typeof(null))  // object
alert(typeof(undefined))  // undefined
alert(typeof(NaN))  // number
alert(NaN==undefined)  // false
alert(NaN==NaN)  // false
var str="123abc";
alert(typeof(str++)) // number
alert(str) // NaN
四、写出函数DateDemo的返回结果,系统时间假定为今天
function DateDemo(){
var d, s="今天日期是:";
d = new Date();
s += d.getMonth() + "/";
s += d.getDate() + "/";
s += d.getYear();
return s;
}

结果:今天日期是:7/17/2010

五、写出程序运行的结果?
for(i=0, j=0; i<10, j<6; i++, j++){
k = i + j;

结果:10(小心陷阱)


var str= "aaaebbbcccddd";
str = str.replace(/(.)\1+/g,'$1')

alert(str)

2. 把字符串中所有单词的首字母都转换为大写
name = 'aaa bbb ccc'; uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );
alert(uw)


1.以下哪个在JAVASCRIPT中会报错:
var a=();
var a=[];
var a={};
var a=//;
2.JAVA中有哪些保留字,越多越好,10个以上.
3.CSS中有几种声明方式.
4.写出你所知道的开源项目或软件,并说明他们的好处以及作用.
最佳答案
1,var a=();var a=//; 报错     两个不行!  ---------------------------------  2,JAVA!  int  char  while  for  do  switch  void  double  float  unsigned  long  try  abstract   super  extent  bool  break  case  catch  class  delegate foreach in   static  void  public private protected internal  等等  太多了  3,    这题有点不知道怎么答,到底声明是什么意思?  是声明一个已经存在一个CSS有三种:    1.导入一个已经存在的CSS文件  <link rel="stylesheet" type="text/css" href="">    2.直接在HARD里声明一个CSS代码段:  <style type="text/css">       .....  </style>    3.直接在网页元素里声明使用CSS:  style="color:red;"    如果是声明CSS类 , 则有三种:  直接标签名作为CSS类名称:  TagName{ ... }  以元素ID作为CSS类声明:    #ID{...}  自定义CSS类名称 :         .ClassName{}    --------------------------------------------------------------  4,开源的    客户端脚本的话就说说 ExtJS    她可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应 用中。  而且,使用这个框架可以直接用一行代码实现非常漂亮的而且标准的网页控件界面,可以使用代码调用的控件来替代目前的流行网页布局,和WinForm程序一样,使得前端开发完全控件化。  Jquery也是优秀的前台框架,优点:  代码简练、语义易懂、学习快速、文档丰富。    jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。    jQuery支持CSS1-CSS3,以及基本的xPath。    jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。    可以很容易的为jQuery扩展其他功能。    能将JS代码和HTML代码完全分离,便于代码和维护和修改。    插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。     除此之外,还有ProtoType,Bindows(JS框架)   服务,ZedGragh(.Net做统计图的),Spring,Hibernate,Structs,EJB,Jbmp等比较有名的
网易JS面试题引起的讨论
2012-02-05 23:58
第一道:

var tt = 'aa'; 
function test(){ 
alert(tt);  //underfined;
var tt = 'dd'; 
alert(tt);  //dd

test(); 


第二道:

var myObject= {
  num: 2,
  add: function(){
  this.num=3;
  (function(){
  alert(this.num);  //underfined
  this.num=4;
  })();
alert(this.num)   //3
  }
}

myObject.add();


本文主要是讲预编译。

1. undefined
当需要判断一个变量是否为 undefined 时,直接用
Js代码

  1. alert(om == undefined);  

alert(om == undefined);


可能出错。因为 JS 如果引用未声明的变量,那么会出现JS错误,在上述例子中,如果 om 未曾声明,就会报 JS 错误。因此判断一个变量是 undefined,最好用这种方法
Js代码

  1. alert( typeof om == 'undefined' );  

alert(typeof om == 'undefined');



2. JS 中没有块作用域,在函数中声明的变量在整个函数中都可用(无论是在函数开头处声明还是末尾处声明),如
Js代码

function() {
  alert(om); // 显示 undefined
  var om = 'abc';
  alert(om); // 显示 abc
  }



3. JS 在函数执行前将整个函数的变量进行声明,无论这个变量的声明语句有没有机会执行,如
Js代码

  1. function () {  
  2. alert(om); // 显示 undefined  
  3. if ( false ) {  
  4. var om = 'abc' ; // 此处声明没有机会执行  
  5. }  
  6. }  

======================================================================

今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的
Js代码

<script>
  var x = 1, y = z = 0;
  function add(n) {
  n = n+1;
  }

  y = add(x);
   
  function add(n) {
  n = n + 3;
  }

  z = add(x);
</script>



问执行完毕后 x, y, z 的值分别是多少?

仔细看的人马上就知道了, x, y 和 z 分别是 1, undefined 和 undefined。

不过,如果将两个 add 函数修改一下,题目变为
Js代码

<script>
  var x = 1, y = z = 0;
  function add(n) {
  return n = n+1;
  }

  y = add(x);
   
  function add(n) {
  return n = n + 3;
  }

  z = add(x);
</script>


那么这时 y 和 z 分别是什么呢?我马上想到是 2 和 4,不过结果却是 4 和 4。
这说明,在第一次调用 add 函数之前,第二个 add 函数已经覆盖了第一个 add 函数。原来,这是 JS 解释器的"预编译",JS 解析器在执行语句前会将函数声明和变量定义进行"预编译",而这个"预编译",并非一个页面一个页面地"预编译",而是一段一段地预编译,所谓的段就是一个 <script> 块。且看下面的代码
Js代码


<script>
  function add(n) {
  return n = n+1;
  }
  alert(add(1));
</script>

<script>
  function add(n) {
  return n = n+3;
  }
  alert(add(1));
</script>



会分别弹出 2 和 4。

那么,将上面的题目再变换一下,如下
Js代码

<script>
  alert(typeof addA);
  addA();
  function addA() {
  alert("A executed!");
  };
</script>
<script>
  alert(typeof addB);
  addB();
  var addB = function() {
  alert("B executed!");
  };
</script>



执行结果是什么呢? 按照前面的知识,第一个 <script> 块执行正常,结果就是弹出 "function" 和 "A executed!" 的对话框。
那么第二个 <script> 块呢? 执行结果是弹出 "undefined" 的对话框后报 JS 错误,说 addB 不是一个 function。
有点出乎意料?呵呵,其实第一个 script 块中的 addA 一句是函数声明,当然进行了"预编译",但是第二个 script 块中的 addB 一句并非函数声明。只不过在执行这段 <script> 之前对变量进行了"预声明",因此一开始变量addB是存在的,只不过是 undefined 的(可参看http://eclipse07.javaeye.com/admin/blogs/484566 )。因此执行结果便如上面所示。

将题目再变化下,如下
Js代码


<script>
  alert(typeof addB);
  addB();
  var addB = function addB() {
  alert("B executed!");
  };
</script>


执行结果如何呢?
在 ff 下执行,与上面执行结果一样。打住,且在 IE6 下执行看看如何。
结果是弹出 "function" 和 "B executed!",一切正常。
Google 了一下,有人说这是 IE 的 BUG。

那么,请看下面的代码
Js代码

<script>
  alert(typeof addB);
  var addB = "variable";
  function addB() {
  alert("function addB");
  }
  alert(addB);
</script>


执行结果是"function"和"variable"。
JS解析器先预定义了 addB 变量为 undefined, 但是 addB 函数覆盖了此变量,因此一开始执行结果是 function,然后 addB 被赋值为 "variable",因此最后执行结果是 "variable",上面的代码即使变为
Js代码

<script>
  alert(typeof addB);
  function addB() {
  alert("function addB");
  }
  var addB = "variable";
  alert(addB);
</script>


结果也一样,这说明JS解析器先预声明变量,再预定义函数 。
小结一下:JS 在执行前会进行类似"预编译"的操作,而且先预定义变量再预定义函数。








1、form中的input有哪些类型?各是做什么处理使用的?
2、table标签中border,cellpadding     td标签中colspan,rowspan分别起什么作用?
3、form中的input可以设置readonly和disable,请问这两项属性有什么区别?
4、JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?

1、form中的input有哪些类型?各是做什么处理使用的?
text   radio   checkbox   file   button   image   submit   reset   hidden
2、table标签中border,cellpadding     td标签中colspan,rowspan分别起什么作用?
border边界
cellpadding边距
colspan跨列数
rowspan跨行数
3、form中的input可以设置readonly和disable,请问这两项属性有什么区别?
readonly不可编辑,但可以选择和复制
disable不能编辑复制选择
4、JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
alert
confirm
prompt





var Prize = new Array();
Prize[0]="对讲机";
Prize[1]="5Q币";
Prize[2]="地下城与勇士礼包";
Prize[3]="10Q币";
Prize[4]="QQ飞车礼包";
Prize[5]="1Q币";
function startLuckDraw(){
    //verify();
    var number = document.fm.name.value;   
    var xmlhttp=getXMLHttp();
    xmlhttp.open("GET","select.php?number="+number,true);
    xmlhttp.send();
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            if(xmlhttp.responseText=="1")
            {
                alert("一个身份证号码只能抽一次奖");
            }
            else
            {
                start();
            }
        }
      }
}
function start()
{
            var t=parseInt(18*Math.random());
            if(t==18){t=0}
            for(var i=0;i<18;i++)
            {
                document.getElementById("Prize"+i).className = "";
            }
                document.getElementById("Prize"+t).className="choose";
               document.fm.displayBox.value=t;
               meter=setTimeout("start()",100);
}
function endLuckDraw(){

    clearTimeout(meter);
    var x= document.fm.displayBox.value;
    var number = document.fm.name.value;
    var request=getXMLHttp();

    request.open("GET","add.php?number="+number+"&prize="+Prize[x],true);
    request.send();
    if(Prize[x]!="谢谢参与"){
    alert("恭喜您获得了奖品:"+Prize[x]+"!");}
    else {alert("谢谢参与!")}

}

function getResult(){
    var t = document.getElementsByTagName("ul")[0].firstChild;
    var x = Number(document.getElementById("count").value);
    var newNode = document.createElement("li");
    var request=getXMLHttp();
    request.open("GET","select2.php?id="+x,true);
    request.send();
    request.onreadystatechange=function(){
    if (request.readyState==4 && request.status==200)
        {
            if(request.responseText){
            var text = document.createTextNode(request.responseText);
            newNode.appendChild(text);
            document.getElementById("number").insertBefore(newNode,t);
            document.getElementById("count").value=x+1;
            }
            //document.getElementById("123").innerHTML = request.responseText;   
        }
    }
}
    function verify(){ 
            var phone = document.fm.name.value; 
            var tmp = /^1[3-9]\d{9}$/;     //支持11位手机号码验证 
            var flag=tmp.test(phone); 
            if(!flag){ 
               alert("手机号输入不合法"); 
               return false; 
               //startLuckDraw();   
            }
            else {
                startLuckDraw();   
            }       
    } 
function getXMLHttp(){
     var xmlhttp;
      try {
             // Mozilla / Safari / IE7
             xmlhttp = new XMLHttpRequest();
      } catch (e) {
           // IE
           var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
                                            'MSXML2.XMLHTTP.4.0',
                                            'MSXML2.XMLHTTP.3.0',
                                            'MSXML2.XMLHTTP',
                                            'Microsoft.XMLHTTP' );
       var success = false;
       for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
         try {
             xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
              success = true;
         } catch (e) {}
       }
       if (!success) {
        throw new Error('Unable to create XMLHttpRequest.');
     }
   }
   return xmlhttp;
   }
//创建创建一个XMLHttpRequest对象 

setInterval("getResult()",5000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值