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();
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值