js常见面试题

js常见面试题

1、JavaScript的数据类型都有什么?

基本数据类型:String,boolean,Number,Undefined, Null

引用数据类型:Object(Array,Date,RegExp,Function)

2、希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)

  •  
  • JScript 代码   复制
  • 
    var domList = document.getElementsByTagName(‘input’)
    var checkBoxList = [];
    var len = domList.length;  //缓存到局部变量
    while (len--) {  //使用while的效率会比for循环更高
      if (domList[len].type == ‘checkbox’) {
          checkBoxList.push(domList[len]);
      }
    }
    
    		
  • 3、设置一个已知ID的li的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)

    var dom = document.getElementById(“ID”);
    dom.innerHTML = “xxxx”
    dom.style.color = “#000”

    4、看下列代码,输出什么?解释原因。

    var a;
    alert(typeof a); // undefined
    alert(b); // 报错
     

    解释:Undefined是一个只有一个值的数据类型,这个值就是“undefined”,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。

    5、看下列代码,输出什么?解释原因。

  •  
  • 
    var undefined;
    undefined == null; // true
    1 == true;   // true
    2 == true;   // false
    0 == false;  // true
    0 == '';     // true
    NaN == NaN;  // false
    [] == false; // true
    [] == ![];   // true
    
    		
  • 解释

    (1)、undefined与null相等,但不恒等(===)
    (2)、一个是number一个是string时,会尝试将string转换为number
    (3)、尝试将boolean转换为number,0或1
    (4)、尝试将Object转换成number或string,取决于另外一个对比量的类型
    (5)、所以,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。
     

    6、看下列代码,给出答案

  •  
  • 
    var a = new Object();
    a.value = 1;
    b = a;
    b.value = 2;
    alert(a.value);
    
    		
  • 结果为 2

    7、已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。

    答案alert(stringArray.join(" "))

    8、var numberArray = [3,6,2,4,1,5];

    1) 实现对该数组的倒排,输出[5,1,4,2,6,3]

    2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]

  • 
     var numberArray = [3,6,2,4,1,5];
    
    numberArray.reverse(); // 5,1,4,2,6,3
    
    numberArray.sort(function(a,b){  //6,5,4,3,2,1
       return b-a; 
    })
    
    		
  • 9、输出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,则输出2014-09-26

  •  
  • JScript 代码   复制
  • 
    var d = new Date();
    // 获取年,getFullYear()返回4位的数字
    var year = d.getFullYear();
    // 获取月,月份比较特殊,0是1月,11是12月
    var month = d.getMonth() + 1;
    // 变成两位
    month = month < 10 ? '0' + month : month;
    // 获取日
    var day = d.getDate();
    day = day < 10 ? '0' + day : day;
    alert(year + '-' + month + '-' + day);
    
    		
  • 10、foo = foo||bar ,这行代码是什么意思?为什么要这样写?

    答案:if(!foo) foo = bar; //如果foo存在,值不变,否则把bar的值赋给foo。

    短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。

    11、看下列代码,将会输出什么

  •  
  • JScript 代码   复制
  • 
     var foo = 1;
     function(){
         console.log(foo);
         var foo = 2;
         console.log(foo);
     } 
    
    		
  • 答案:输出undefined 和 2。

    12、用js实现随机选取10--100之间的10个数字,存入一个数组,并排序。 

  •  
  • JScript 代码   复制
  • 
    var iArray = []; 
    funtion getRandom(istart, iend){
            var iChoice = istart - iend +1;
            return Math.floor(Math.random() * iChoice + istart;
    }
    for(var i=0; i<10; i++){
            iArray.push(getRandom(10,100));
    }
    iArray.sort();
    
    		
  • 13、把两个数组合并,并删除第二个元素。

  •  
  • JScript 代码   复制
  • 
     var array1 = ['a','b','c'];
     var bArray = ['d','e','f'];
     var cArray = array1.concat(bArray);
     cArray.splice(1,1);
    
    		
  • 14、有这样一个URL:url?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:'1', b:'2', c:'', d:'xxx', e:undefined}。

  •  
  • JScript 代码   复制
  • 
    function serilizeUrl(url) {
        var result = {};
        url = url.split("?")[1];
        var map = url.split("&");
        for(var i = 0, len = map.length; i < len; i++) {
            result[map[i].split("=")[0]] = map[i].split("=")[1];
        }
        return result;
    }
    
    		
  • 15、看下面代码,给出输出结果

  •  
  • JScript 代码   复制
  • 
     for(var i=1;i<=3;i++){
       setTimeout(function(){
           console.log(i);    
       },0);  
     };
    
    		
  • 答案:4 4 4。

    16、如何消除一个数组里面重复的元素?

  •  
  • JScript 代码   复制
  • 
    var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
            function deRepeat(){
                var newArr=[];
                var obj={};
                var index=0;
                var l=arr.length;
                for(var i=0;i<l;i++){
                    if(obj[arr[i]]==undefined)
                      {
                        obj[arr[i]]=1;
                        newArr[index++]=arr[i];
                      }
                    else if(obj[arr[i]]==1)
                      continue;
                }
                return newArr;
    
            }
            var newArr2=deRepeat(arr);
            alert(newArr2); //输出1,2,3,4,5,6,9,25
    
    		
  • 17、说出以下函数的作用是?空白区域应该填写什么?

  •  
  • JScript 代码   复制
  • 
    //define 
    (function(window){
        function fn(str){
            this.str=str;
        }
    
        fn.prototype.format = function(){
            var arg = ______;
            return this.str.replace(_____,function(a,b){
                 return arg[b]||"";
          });
        }
        window.fn = fn;
    })(window);
    
    //use
    (function(){
        var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');
        console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));
    }标签: