js面试题

1.

var s = 'hello';
s.pro = 'world';
console.log(s.pro+s);

答案是: undefinedhello(这儿主要是考察了js的基本功,也就是对象的赋值;很明显第一行声明了变量s只是一个字符串。所以s.pro是不成立的。)

2.

var n = 10;
n.pro = 10;
console.log(n.pro+n);

答案是NaN(这道题与上面一道是差不多的,不同的是数值加上一个undefined等于NaN)

3.

    var length = 10;
    function fn(){
            console.log(this.length);
    }

    var obj = {
            length: 5,
            method: function(){
                    fn();
                    arguments[0]();
                    console.log(this.length);
            }
    }

    obj.method(fn,1);
答案是10和2,5
解析:这道题主要考查的是对js中this指向的认识,(js中this的值取决于调用的模式),如题目 中所涉及到的方法调用模式,即当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this指向了该对象,如:
var obj = {
        value: 1,
        getvalue: function(){
                console.log(this.value);
        }
}

obj.getvalue(); //结果输出1,此时的this指向obj;
注意: 该模式中,this对象的绑定发生在方法被调用的时候。
所以,题目中fn()其实指向的是全局即window,而arguments[0]()指向的是arguments本身,这儿因为传入了两个参数,所以输出为2;

4.

    if('a' in window){
        var a = 10;
    }
    console.log(a);
答案是: 10
解析: 这道题主要考查的是声明提升(主要包括函数声明提升、变量声明提升)如上面题目所示,其实相当于
var a;
if('a' in window){
        a = 10;
}
附加: 函数声明提升
say();
function say(){
        console.log('hi');
}

尽管函数是在say()后面定义的但是仍然能够执行。

5. var s = ‘aaabcdddddcccbbbba’; 编写一个函数,列出s中出现的每一个字符串以及其出现的次数;

      var obj = {};
      var letter;
      var key,num;

      for(var i = 0; i < s.length; i++){
          letter = s[i];

          if(!obj[letter]){
              obj[letter] = 1;
          }else{
              obj[letter] ++;
          }
      }

      for(k in obj){
          num = obj[k];
          key = k;
          console.log(key+'出现了'+num+'次');
      }

解析: 上边也只是列举出了其中的一个解法,思路就是,遍历s字符串,通过letter变量将字符串中的每一项存放到obj对象中,如果已经存放有该变量,则将属性值加1,否则的话就给obj增加该属性名,并且赋值为1;

6. 现有一个<div><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a></div> 输出点击的a对应的索引值。


// 方法一:
var as = document.getElementsByTagName("a");
for(var i = 0; i < as.length; i++){
      as[i].idx = i;
      as[i].onclick = function(){
            console.log("所点击的a标签对应的索引值为:"+this.idx);
    }
}

// 方法二:
function addBtn(){
     for(var i = 0; i < as.length; i++){
         as[i].onclick = (function(j){
             return function(){
                 alert(j);
             }
         })(i)
     }
 }

 addBtn();
发布了95 篇原创文章 · 获赞 136 · 访问量 29万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览