前端面试基础题

HTML和CSS
1、cookies , sessionStorage 和 localStorage 的区别
2、position 有几个值以及他们的作用
3、浏览器的内核(呈现引擎)
4、img 的 alt 与 title 有何异同?strong 与 em 的异同?
5、为什么利用多个域名来存储网站资源会更有效?
6、网页制作会用到的图片格式有哪些?
7、一次 js 请求一般情况下有哪些地方会有缓存处理?
8、一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载?
9、你如何理解 HTML 结构的语义化?
10、有哪项方式可以对一个 DOM 设置它的 CSS ?
11、CSS 都有哪些选择器?
12、

标签内的文字是什么颜色的?



  

123

13、CSS 中可以通过哪些属性定义 ,使得一个 DOM 元素不显示在浏览器可视范围内?
14、超链接访问的 L-V-H-A ?
15、请用 CSS 写一个简单的幻灯片效果页面?
16、行内元素和块级元素的具体区别是什么?行内元素的 padding 和 margin 可设置吗?
17、浏览器默认的天生 inline-block 元素(拥有内在尺寸,可设置高宽,但不会自动换行),有哪些?
18、什么是外边距重叠?重叠的结果是什么?
19、什么是BFC?
20、rgba() 和 opacity 的透明效果有什么不同?
21、 css 中可以让文字在垂直和水平方向上重叠的两个属性是什么?
22、如何垂直居中一个浮动元素?
23、如何垂直居中一个?
24、px 、em 和 rem 的区别?
25、Sass 、Less 是什么?大家为什么要使用他们?
26、display:none 与 visibility:hidden 的区别是什么?
27、CSS 中 link 和 @import 的区别?
28、盒子模型?
29、HTML 与 XHTML 二者有什么区别?
30、!important的作用?
31、IE5-8 不支持 opacity,解决办法?
32、IE6 不支持 PNG 透明背景,解决办法?
33、CSS属性选择器和伪类选择器?
34、position 跟 display 、margin collapse 、overflow 、float 这些特性相互叠加后会怎么样?
35、css 优先级算法如何计算?
36、我想让行内元素跟上面的元素距离 10px,加 margin-top 和 padding-top 可以吗?
37、说说 display 属性有哪些?可以做什么?
38、哪些 css 属性可以继承?
39、介绍display为flex的应用
40、vh、vm是什么单位?
41、css中的calc()怎么用?
JS基础
1、typeof 返回的数据类型

  'undefined' --值未定义
  'boolean' --布尔值
  'string' --字符串
  'number' --数值
  'object' --对象或者null
  'function' --函数

2、事件
  事件冒泡:事件开始时由最具体的元素逐级向上传播到不具体的节点
  事件捕获:与事件冒泡相反
  事件委托:利用事件冒泡的原理,让父元素代替执行事件(做代理)
  DOM0级事件处理程序:btn.onclick
  DOM2级事件处理程序:addEventListener,removeEventListener
  阻止事件冒泡:e.stopPropagation();
         e.canceBubble=true;(IE9之前)
  阻止默认事件:e.preventDefault();
3、call、apply和bind的区别
  用途:在特定的作用域中调用函数
  区别:call和apply接收参数的方式不同,call接收逐个列出的,apply接收数组,bind会返回一个函数在后面加()才可以执行,而call和apply是直接执行的
4、this指针
  指向调用上下文,在执行的时候才会被确定指向,定义的时候不会
5、闭包
  内层作用域可以访问外层作用域的变量

function createFunctions(){
  var result = new Array();
  for (var i=0 ; i < 10; i++){
    result[i] = function(num){
      return function(){
       return num; 
      }
    }(i)
  }
  return result
}

6、编写一个数组去重的方法
  https://mp.weixin.qq.com/s/IIP2allAOMVFO3r4N-42yw
  12种数组去重的方法(史上最全)

1、利用for嵌套for,然后splice去重(ES5中最常用)
function unique(arr){            
        for(var i=0; i
2、利用ES6 Set去重(ES6中最常用)
function unique (arr) {
  return Array.from(new Set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
 //[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉重复“{}”的方法。
简化版本只需一行代码:
[...new Set(arr)]
3、利用hasOwnProperty
function unique(arr) {
    var obj = {};
    return arr.filter(function(item, index, arr){
        return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
    })
}
    var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
        console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}]   //所有的都去重了
利用hasOwnProperty 判断是否存在对象属性
4、利用递归去重
function unique(arr) {
        var array= arr;
        var len = array.length;

    array.sort(function(a,b){   //排序后更加方便去重
        return a - b;
    })

    function loop(index){
        if(index >= 1){
            if(array[index] === array[index-1]){
                array.splice(index,1);
            }
            loop(index - 1);    //递归loop,然后数组去重
        }
    }
    loop(len-1);
    return array;
}
 var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "a", "true", true, 15, false, 1, {…}, null, NaN, NaN, "NaN", 0, "a", {…}, undefined]

7、将伪数组(argument)转变为真数组的ES5方法及原理

[].slice.call(argument)  
变相的使没有slice方法的argument伪数组拥有slice方法从而转化为真数组

8、添加、删除、替换、插入到某个接点的方法

node.appendChild(newnode)
node.insertBefore(newnode,existingnode) /*原生的 js 中不提供 insertAfter()*/
node.replaceChild(newnode,oldnode)
node.removeChild(node)

9、javascript 的同源策略
  域名、协议、端口一致,有三个标签可以不受同源策略的限制,有

你可能感兴趣的:(前端面试基础题)