前端面试题集锦

166 阅读3分钟

1.请解释一下doctype的作用,有doctype和没有doctype有什么区别

答:声明文档类型,此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。

2.XHTML与HTML有什么区别,什么情况下用XHTML

答:XHTML可以认为是XML版本的HTML,为符合XML要求,XHTML语法上要求更严谨些。

3.请写出3个使用this的典型应用

(1)、在html元素事件属性中使用,如:

<input type=”button” onclick=”showInfo(this);” value=”点击一下”/>

(2)、构造函数

function Animal(name, color) {
  this.name = name;
  this.color = color;
}

(3)、input点击,获取值

<input type="button" id="text" value="点击一下" />
<script type="text/javascript">
    var btn = document.getElementById("text");
    btn.onclick = function() {
        alert(this.value);    //此处的this是按钮元素
    }
</script>

4.数组去重

一、利用ES6 Set去重(ES6中最常用)

function unique5(arr){
  var x = new Set(arr);
 return [...x];
}

二、双重for循环

let  arr=[1,2,2,3,1,4,4,8,8,8,8,5,5,6,6,7,7,8]
   
       //第一次遍历数组
        for(var i=0;i<arr.length;i++){
       //第二次遍历数组,是第一遍历数组下标的下一个数据
            for(var j=i+1;j<arr.length;j++){
        //判断第一层遍历数据和第二层遍历的数据是否相同
                if(arr[i]==arr[j]){
              //如果数据相同则通过splice删除一条相同的数据
                    arr.splice(i,1)
              //i是第一层遍历的下标,因为上一步删除了一条数据,所以下标也需要减一,否则实际下标,要比数组中的数据更多
                    i--;
               //j 也同样需要和i一样减一,保持遍历依旧同步判断
                    j--;
                }
            }
 
//去重完成以后,数组数据在控制台输出
  console.log(arr)

5.数组求和

function sumArray(arr){
            let sum = 0;
            for(let i=0;i<arr.length;i++){
                sum = sum + arr[i];
            }
            return sum;
        }
        var array1 = [1,2,3,4,5,6,5,4]
        var result =sumArray(array1);
        console.log(result);

6.如何显示/隐藏一个DOM元素?

display:block;display:none

7.javascript中如何检测一个变量是一个string类型?

function a(obj){
return typeof(obj)=="string";
}

8.网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“xx年还剩xx天xx时xx分xx秒”

9.补充代码,鼠标单击button1后将button1移动到button2的后面

10.JavaScript中如何对一个对象进行深度clone,以及什么情况下会使用到深度clone

11.鼠标点击页面中的任意标签,alert该标签的名称。(注意兼容性)

12.请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象 var url = "witmax.cn/index.php?k…"; function parseQueryString(argu){???}

13.如何点击每一列的时候alert其index?

<ul>
  <li>这是第一条</li>
  <li>这是第二条</li>
  <li>这是第三条</li>
</ul>
window.onload = function(){
  var lis = document.getElementsByTagName("li");
  for (var i = 0; i < lis.length; i++) {
      lis[i].onclick = (function(x) {
          return function() {
              alert(x);
          }
      })(i);
  }
}

14.请给出异步加载js方案,不少于两种。

defer,异步加载。 async,异步加载

15.判断一个字符串中出现字数最多的字符,统计这个次数

var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
    if(!json[str.charAt(i)]){
       json[str.charAt(i)] = 1;
    }else{
       json[str.charAt(i)]++;
    }
};
var iMax = 0;
var iIndex = '';
for(var i in json){
    if(json[i]>iMax){
         iMax = json[i];
         iIndex = i;
    }
}        
console.log('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

16.在html中,position取值有哪几种,默认值是什么?

static, relative, absolute, fixed。默然的值是: static

17.如何居中一个浮动元素?

.wap{
width:500px;
height:300px;
float:left;
margin-left:50%;
position:relative;
left:-250px;
background-color:#CCC;
}

18.怎么样从web前端方面优化性能?至少列举5点?

减少http请求:合并js文件/合并css文件/雪碧图的使用(css sprite)/使用base64表示简单的图片

减小资源体积:gzip压缩/js混淆/css压缩/图片压缩

缓存:DNS缓存 /CDN部署与缓存 /http缓存

移动端优化:/使用长cache,减少重定向/首屏优化,保证首屏加载数据小于14kb/不滥用web字体

19.js延迟加载的方式有哪些?

setTimeout,async,await

20.ajax请求时,如何解释json数据?

前端在解析后端发来的数据,使用JSON.parse()方法把字符串转为json对象. 前端在向后端发送数据,使用JSON.stringify()方法把json对象转为字符串.

21.如何阻止事件冒泡和默认事件?

22.iframe有哪些缺点?

⒈iframe会阻塞主页面的Onload事件;

⒉iframe和主页面共享链接池,而浏览器对相同城的链接有限制,所以会影响页面的并行加载;

⒊使用iframe之前需要考虑这两个缺点,如果需要使用iframe,最好是通过JavaScript;

⒋动态给iframe添加src属性值,这样可以可以绕开以上两个问题

⒌不利于seo

⒍代码复杂,无法一下被搜索引擎索引到

⒎iframe框架页面会增加服务器的http请求,对于大型网站不可取

⒏很多的移动设备无法完全显示框架,设备兼容性差

23.常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?

24.你做的页面在哪些浏览器测试过?这些浏览器内核分别是什么?经常遇到的浏览器兼容性有哪些?原因,解决方法是什么?

25,如果制作一个访问量很大的网站,对css,js和图片应该怎么处理?