一、基础知识填空(每空1分,共22分)

1、JS中设置定时器的两种方法: setTimeout 、 setInterval
2、函数中内置接收参数的集合是: arguments
3、把函数体中的某个值返回到外面用: return
4、数组的基础知识和应用
A、在数组的后面追加一项(至少两种办法): arr.push 、 arr[arr.length] =x
B、删除数组的最后一项(至少两种办法): pop 、 arr.length—
C、克隆一份和原来一样的数组(至少两种): arr.concat() 、 arr.slice()
D、数组从小到大排序(可以处理10以上的数字): arr.sort((a,b)=>a-b)
E、实现找到第n项到第m项(包括n和m)的内容,返回一个新的数组(原有数组不变): arr.slice(n,m+1)
5、Math、Date常用的方法
获取n~m之间的随机整数: Math.round(Math.random()*(m-n)+n)
获取一组数字中的最大值和最小值: Math.max() 、 Math.min()
获取当前日期与时间: new Date().toLocaleString()
获取当前事件戳: new Date().getTime()
6、DOM操作方法84
获取元素所有的子节点: childNodes
获取上一个哥哥元素节点(可以不兼容): previousElementSibling
动态创建一个div标签,并且把其添加到body的末尾位置: (2分)
var ele = document.createElement(‘div’);
document.body.appendChild(ele);

document.body.innerHTML = document.body.innerHTML + ‘


删除元素的方法: ele.parentNode.removeChild(ele)

二、案例实践题

1、(12分)看需求实现相关的JS代码(常见面试题)

给#box下的li实现奇偶行变色
鼠标滑过li背景高亮展示,鼠标离开回归原有颜色
鼠标点击li弹出 ‘我是第N行’(N为索引+1),例如:点击第一个li弹出‘我是第1行’

image.gif

  1. <body>
  2. <ul class="box" id="box">
  3. <li>凑个字数,我是一个LI,我哈哈哈1</li>
  4. <li>凑个字数,我是一个LI,我哈哈哈2</li>
  5. <li>凑个字数,我是一个LI,我哈哈哈3</li>
  6. <li>凑个字数,我是一个LI,我哈哈哈4</li>
  7. <li>凑个字数,我是一个LI,我哈哈哈5</li>
  8. <li>凑个字数,我是一个LI,我哈哈哈6</li>
  9. </ul>
  10. <script>
  11. var boxList = document.querySelectorAll('#box>li');
  12. for (var i = 0; i < boxList.length; i++) {
  13. var item = boxList[i];
  14. item.myIndex = i;
  15. // 奇偶行变色
  16. item.style.background = i % 2 === 0 ? '#FFF' : '#FFC0CB';
  17. // 鼠标滑过的高亮选中
  18. item.onmouseover = function () {
  19. this.style.background = '#87CEFA';
  20. };
  21. item.onmouseout = function () {
  22. this.style.background = this.myIndex % 2 === 0 ? '#FFF' : '#FFC0CB';
  23. };
  24. // 鼠标点击,弹出序号
  25. item.onclick = function () {
  26. alert(`哈哈哈,我是第 ${this.myIndex+1} LI!`);
  27. };
  28. }
  29. </script>

2、(13分)仿照alert输出,自己编写myAlert函数。

执行myAlert(‘这是我自己写的alert’);会在页面上显示实参的语句与确定button,点击button,元素隐藏
第二周考试 - 图2

<body>
    <!-- 在这里编写你元素 -->
  <div id="box" style="display: none">
    <p></p>
    <button>确定</button>
  </div>
</body>
<script>
  //在这里编写你的JS代码

  function myAlert(text) {
    var box = document.querySelector('#box'),
        p = box.querySelector('p'),
        button = box.querySelector('button');
    p.innerText = text;
    box.style.display = 'block';
    button.onclick = function () {
      box.style.display = 'none';
    };
  }
  //button的事件绑定在函数里函数外都行
  //必须封装函数
</script>

3、(12分)编写函数,实现传入的英文语句首字母大写。

每句用英文句号.结束。

function firstLetterUpper(str) {
  var ary=[];
  str.split('.').forEach(item => {
    var str = item.substring(0,1).toUpperCase()+item.substring(1);
    // 这里截取的方法用substring substr slice,都行
    ary.push(str);
  })
  //用forEach也行 for循环也行
  return ary.join('.');
}

function firstLetterUpper(str) {
  // map写法
  return str.split('.').map(item => {
    return item.substring(0,1).toUpperCase()+item.substring(1);
  }).join('.');
}
firstLetterUpper('i want to eat noodles.')
//=>'I want to eat noodles.'
firstLetterUpper('hello,my name is Wincy.i am 13 years old.')
//=>'Hello,my name is Wincy.I am 13 years old.'

4、(12分)任意数求和,并求平均数,结果保留两位小数

function find_average() {
  //在这里编写你的代码
  var total = 0,
      n = 0;
  for (var i = 0; i < arguments.length; i++) {
    var item = +arguments[i];
    if (isNaN(item)) continue;
    total += item;
    n++;
  }
  // [Number].toFixed([n]):保留小数点后面N位,结果是字符串
  return (total / n).toFixed(2);

}
find_average(1,1,1)// 1
find_average(1,2,3)// 2
find_average(1,2,3,4)// 2.5
find_average(1,2,'A',4)// 2.33

5、(17分)做一个抽奖程序,

页面中有一个区域显示中奖人员的编号,在JS中写一段代码,要求每隔1秒中随机创建一个四位的数字(每一位数字的取值范围0-9),当10秒结束后,结束定时器,最后显示的四位数字即是中奖的号码
第二周考试 - 图3

<body>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</body>
<script>
  //setInterval方式1
           // 生成随机数
        function createRandom(n,m){
           return Math.round(Math.random()*(m-n)+n);
        }
        //每秒钟做的事情 创建一个四位数的随机数字 每一位的取值范围 0-9 在放到页面上显示
        function fn(){
            //var num=`${createRandom(0,9)}${createRandom(0,9)}${createRandom(0,9)}${createRandom(0,9)}`;
            var num='';
            for (var i = 0; i < 4; i++) {
                var n=createRandom(0,9);
                num+=n;
            }
            document.body.innerHTML=document.body.innerHTML+`${num}<br/>`;
        }

        var timer=setInterval(fn,1*1000); //参数(函数名称/时间)

        setTimeout(function(){
            clearInterval(timer);
        },10*1000);
</script>

//按照次数停止
<script> 
        // 生成随机数
        function createRandom(n,m){
           return Math.round(Math.random()*(m-n)+n);
        }

        //每秒钟执行一次fn
        var timer=setInterval(fn,1*1000); //参数(函数名称/时间)
        //每秒钟做的事情 创建一个四位数的随机数字 每一位的取值范围 0-9 在放到页面上显示
        var cishu=0;
        function fn(){
            //var num=`${createRandom(0,9)}${createRandom(0,9)}${createRandom(0,9)}${createRandom(0,9)}`;
            if(cishu==10){
                //清除定时器
                clearInterval(timer);
                //打断函数执行
                return;
            }
            var num='';
            for (var i = 0; i < 4; i++) {
                var n=createRandom(0,9);
                num+=n;
            }
            document.body.innerHTML=document.body.innerHTML+`${num}<br/>`;
            cishu++;
        }
</script>

<script>
  // 回调方式
var divs = document.querySelectorAll('div');
var num = 0;
function createRandom(n, m) {
  return Math.round(Math.random() * (m - n) + n);
}
function lottery() {
  setTimeout(() => {
    if (num > 9) {
      return;
    }
    var str = `${createRandom(0, 9)}${createRandom(0,9)}${createRandom(0, 9)}${createRandom(0, 9)}`;
    divs[num].innerText = str;
    num += 1;
    lottery();
  }, 1000);
}
lottery();
</script>

6、(12分)给定一个随机的非负数,必须以相反的顺序返回数组中该数的数字。

//方式1
function dealNum(num) {
   var ary=(num+'').split('').reverse();
   var ret=ary.map(item=>{
              return +item;
   });
   return ret;
}
//方式2
function dealNum2(num) {
  var str=(num+'');
  var ary=[];
  for(var i=str.length-1;i>=0;i--){
    ary.push(+str[i]);
  };
  return ary;
};
dealNum(348597) => [7,9,5,8,4,3]