Web前端面试题(二)

1::before 和:before有什么区别?

  •  相同点
    1. 都可以用来表示伪类对象,用来设置对象前的内容
    2. :befor和::before写法是等效的
  •  不同点
    1. :before是Css2的写法,::before是Css3的写法
    2. :before的兼容性要比::before好 ,不过在H5开发中建议使用::before比较好

2.如何居中一个元素(正常、绝对定位、浮动元素)?

(一)元素水平居中的方式

1)行级元素水平居中对齐(父元素设置 text-align:center) 

2)   块级元素水平居中对齐(margin: 0 auto)

3)浮动元素水平居中

4)让绝对定位的元素水平居中对齐

  1. .center{  
  2.          position: absolute; /*绝对定位*/  
  3.          width: 500px;  
  4.          height:300px;  
  5.          background: red;  
  6.          margin: auto; /*水平居中*/  
  7.          left: 0; /*此处不能省略,且为0*/  
  8.         right: 0; /*此处不能省略,且为0*/ 
经验分享:水平居中的主要属性有

 

1. text-alin:center;

2. margin:0 auto

3. position:relative|absolute; left:50%;

(二)元素垂直居中对齐

 1)对行级元素垂直居中(heiht与line-height的值一样)

2)对块级元素垂直居中对齐

  2.1 父元素高度固定的情况

   1)父元素的height与line-height值相同

  2)需要垂直居中的元素

  vertical-align:middle;// 垂直居中对齐

  display:inline|inline-block 块级元素转行级元素

2.2 父元素高度不固定的情况

   父元素的padding-top和padding-bottom一样

 

3、用纯CSS创建一个三角形的原理是什么? 

1.采用的是均分原理

 盒子都是一个矩形或正方形,从形状的中心,向4个角上下左右划分4个部分

 

2.代码的实现

第一步 保证元素是块级元素

第二步 设置元素的边框

第三步 不需要显示的边框使用透明色   transparent属性

.square1{
       width:0; 
        height:0; 
        margin:0 auto; 
        border:6px solid transparent; 
        border-top: 6px solid red;
        border-bottom: 6px solid blue;
   }

效果图

5、用js实现千位分隔符,怎么实现?

正则表达式

 

function divide(num){
       num=num+'';
    var reg=/\d{1,3}(?=(\d{3})+$)/;
    return num.replace(reg,'$&,');
}        

 

6、事件是什么?如何阻止事件冒泡?

用于监听浏览器的操作行为,浏览器触发动作时被捕捉到而调用相应的函数。

阻止事件冒泡:event.StopPropagation();

7、JSON 格式是什么?你了解吗?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。是前后台数据交互最常见的一种数据格式。

 8、同步和异步有什么区别?

同步,我的理解是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,我们做的用户登录功能也是同步处理的,必须用户通过用户名和密码验证后才能进入系统的操作。

异步,是一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务。在程序中异步处理的结果通常使用回调函数来处理结果。在JavaScript中实现异步的方式主要有Ajax和H5新增的Web Worker。

9、谈谈你对模块化开发的理解?

所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数 

10、new操作符具体干了什么呢?

var Func=function(){  }; 

var f=new Func ();  

new共经过了4几个阶段:

1:创建一个空对象 var obj=new Object(); 

2:设置原型链,让空对象的__proto__指向函数的原型prototype。  obj.__proto__= Func.prototype;  

3:让Func()中的this指向空对象obj,并执行Func()的函数体;var result =Func.call(obj);  

4:判断Func()的返回值类型

  如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。

  使用new来创建对象时,如果return的是非对象(数字、字符串、布尔类型、null等)或没有返回值时会忽略该返回值,返回的是新创建的对象  ;如果return的是对象,则返回该对象。

1)返回的是非对象
function Person(name){
    this.name=name;
    return name;
}
var p=new Person('tom');
console.log(p);//Person {name: "tom"}2)返回的是对象
function Person(name){
    this.name=name;
    return {'name1':name};
}
var p=new Person('tom');
console.log(p);//{name1: "tom"}    

 

 

11、js在页面中的加载顺序以及延迟加载的方式有哪些?

当浏览器遇到(内嵌)<script>时,当前浏览器无从获知javascript是否会修改页面内容,这是浏览器会停止处理页面,先执行该javascript代码,然后再继续解析和渲染页面。同样的情况也发生在使用src属性加载外链javascript的过程中,浏览器必须先花时间下载外链文件的代码,然后解析并执行他,在这个过程中,页面渲染和用户交互完全被阻塞了。

 

 script标签存在两个属性,defer和async:

     <script src="example.js"></script>

   没有defer或async属性,浏览器会立即加载并执行相应的脚本。也就是说在渲染script标签之后的文档之前,不等待后续加载的文档元素,读到就开始加载和执行,此举会阻塞后续文档的加载;

  (1)async

   <script async src="example.js"></script>

     有了async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行;不能保证脚本会按顺序执行

  (2)defer 延迟脚本

  <script defer src="example.js"></script>

         有了defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的,js脚本会被延迟到整个页面都解析完毕后再运行,DOMContentLoaded事件触发执行之前。

         在<script> 元素中设置 defer 属性,等于告诉浏览器立即下载,但延迟执行。包含的脚本将延迟浏览器遇到</html>标签后再执行。

(3)动态创建dom 

//这些代码应被放置在</body>标签前(接近HTML文件底部)
<script type="text/javascript">  
   function downloadJSAtOnload() {  
       varelement = document.createElement("script");  
       element.src = "defer.js";  
       document.body.appendChild(element);  
   }  
   if (window.addEventListener)  
      window.addEventListener("load",downloadJSAtOnload, false);  
   else if (window.attachEvent)  
      window.attachEvent("onload",downloadJSAtOnload);  
   else
      window.onload =downloadJSAtOnload;  
</script>  

 

12、window.onload与$(document).ready()的区别

(1)执行时间

  window.onload必须等页面内所有元素包括图片都加载完成之后才执行

  $(document).ready()在dom结构绘制完毕后就执行

(2)个数

  只能有一个window.onload方法,而$(document).ready()可以有多个

 

转载于:https://www.cnblogs.com/xiaoan0705/p/8610865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值