«

一个前端面试题的小集合

时间:2022-3-2 19:14     作者:独元殇     分类: 前端技术


在思否社区发现的,先收藏起来,以后慢慢看。原作者地址:https://segmentfault.com/a/1190000016504891

前言

因为面试的原因,最近又开始关注前端面试题,浏览过网上很多面试题集合,有很多小伙伴整理的很全面,但是我发现其中有很多技术点在当下已不再流行,而面试题一般都是映射开发中常遇到的一些技能和问题,再结合最近面试中遇到的一些面试题,在这里汇总整理一下,内容有转载过来的,也有自己整理的,后续会定期更新。

另外我也写了一篇文章总结前端面试中遇到的套路,点击浏览

参考链接:https://github.com/markyun/My...

前端开发所需掌握知识点概要:

HTML&CSS:
    对Web标准的理解(结构、表现、行为)、浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、盒模型、Hack、CSS预处理器、CSS3、Flexbox、CSS Modules、Document flow、BFC、HTML5(离线 & 存储、Histoy,多媒体、WebGL\SVG\Canvas);

JavaScript:
    数据类型、运算、对象、Function、继承、闭包、作用域、事件、Prototype、RegExp、JSON、Ajax、DOM、BOM、
    内存泄漏、跨域、异步请求、模板引擎、模块化、Flux、同构、算法、ECMAScript6、Nodejs、HTTP、

其他:
    主流MVVM框架(React\Vue\Angular)、Hybrid App\React Native\Weex、TypeScript、RESTFul、WEB安全、前端工程化、依赖管理、性能优化、
    重构、团队协作、可维护、易用性、SEO、前端技术选型、快速学习能力等;

觉得不够全面?我花一下午时间总结了月份前端面试图谱:

clipboard.png

作为一名前端工程师,无论工作年头长短都应该掌握的知识点

    1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

    2、DOM操作 —— 如何添加、移除、移动、复制、创建和查找节点等。

    3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

    4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

    5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

    6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

    7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

    8、浮动元素 —— 怎么使用它们、它们有什么问题以及怎么解决这些问题。

    9、HTML与XHTML —— 二者有什么区别,你觉得应该使用哪一个并说出理由。

    10、JSON —— 作用、用途、设计结构。

HTML

1. Doctype作用?标准模式与兼容模式各有什么区别?

    1. <!DOCTYPE>声明位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。

    2. 标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

2. HTML5 为什么只需要写 <!DOCTYPE HTML>

     HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);

     而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

3. 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

    首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。

    (1)行内元素有:a b span img input select strong(强调的语气)
    (2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p

    (3)常见的空元素:
        <br> <hr> <img> <input> <link> <meta>
        鲜为人知的是:
        <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

    不同浏览器(版本)、HTML4(5)、CSS2等实际略有差异
    参考: http://stackoverflow.com/questions/6867254/browsers-default-css-for-html-elements

4. 介绍一下你对浏览器内核的理解?

    主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
    渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。

    JS引擎则:解析和执行javascript来实现网页的动态效果。

    最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

5. html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

6. 简述一下你对HTML语义化的理解?

    用正确的标签做正确的事情。
    html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
    即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
    搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
    使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

7. HTML5的离线储存怎么使用,工作原理能不能解释一下?

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
    原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示。

    如何使用:
    1、页面头部像下面一样加入一个manifest的属性;
    2、在cache.manifest文件的编写离线存储的资源;
        CACHE MANIFEST
        #v0.11
        CACHE:
        js/app.js
        css/style.css
        NETWORK:
        resourse/logo.png
        FALLBACK:
        / /offline.html
    3、在离线状态时,操作window.applicationCache进行需求实现。

详细的使用请参考:

[HTML5 离线缓存-manifest简介](http://yanhaijing.com/html/2014/12/28/html5-manifest/)

[有趣的HTML5:离线存储](http://segmentfault.com/a/1190000000732617)

8. 浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
    离线的情况下,浏览器就直接使用离线存储的资源。
详细请参考:[有趣的HTML5:离线存储](http://segmentfault.com/a/1190000000732617)

9. 请描述一下 cookies,sessionStorage 和 localStorage 的区别?

    cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
    sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

    存储大小:
        cookie数据大小不能超过4k。
        sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

    有期时间:
        localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
        sessionStorage  数据在当前浏览器窗口关闭后自动删除。
        cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

10. iframe有那些缺点?

    *iframe会阻塞主页面的Onload事件;
    *搜索引擎的检索程序无法解读这种页面,不利于SEO;
    *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。

    使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
    动态给iframe添加src属性值,这样可以绕开以上两个问题。

11. 如何实现浏览器内多个标签页之间的通信?

    WebSocket、SharedWorker;
    也可以调用localstorge、cookies等本地存储方式;

    localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
    我们通过监听事件,控制它的值来进行页面信息通信;
    注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;

12. 实现不使用 border 画出1px高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果。

    <div style="height:1px;overflow:hidden;background:red"></div>

CSS

1. 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

    (1)有两种, IE 盒子模型、W3C 盒子模型;
    (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
    (3)区  别: IE的content部分把 border 和 padding计算了进去;

2. CSS选择符有哪些?哪些属性可以继承?

    *   1.id选择器( # myid)
        2.类选择器(.myclassname)
        3.标签选择器(div, h1, p)
        4.相邻选择器(h1 + p)
        5.子选择器(ul > li)
        6.后代选择器(li a)
        7.通配符选择器( * )
        8.属性选择器(a[rel = "external"])
        9.伪类选择器(a:hover, li:nth-child)

    *   可继承的样式: font-size font-family color, UL LI DL DD DT;

    *   不可继承的样式:border padding margin width height ;

3. CSS优先级算法如何计算?

    *   优先级就近原则,同权重情况下样式定义最近者为准;
    *   载入样式以最后载入的定位为准;

    优先级为:
        同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
        !important >  id > class > tag
        important 比 内联优先级高

4. CSS3新增伪类有那些?

        举例:
        p:first-of-type    选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
        p:last-of-type    选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
        p:only-of-type    选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
        p:only-child        选择属于其父元素的唯一子元素的每个 <p> 元素。
        p:nth-child(2)    选择属于其父元素的第二个子元素的每个 <p> 元素。

        ::after            在元素之前添加内容,也可以用来做清除浮动。
        ::before            在元素之后添加内容
         :enabled          
        :disabled         控制表单控件的禁用状态。
        :checked        单选框或复选框被选中。

5. 如何居中div?

*  水平居中:给div设置一个宽度,然后添加margin:0 auto属性

        div{
            width:200px;
            margin:0 auto;
         }

*  让绝对定位的div居中

        div {
            position: absolute;
            width: 300px;
            height: 300px;
            margin: auto;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            background-color: pink;    /* 方便看效果 */
        }

*  水平垂直居中一

        确定容器的宽高 宽500 高 300 的层
        设置层的外边距

        div {
            position: relative;        /* 相对定位或绝对定位均可 */
            width:500px;
            height:300px;
            top: 50%;
            left: 50%;
            margin: -150px 0 0 -250px;         /* 外边距为自身宽高的一半 */
            background-color: pink;         /* 方便看效果 */

         }

*  水平垂直居中二

        未知容器的宽高,利用 `transform` 属性

        div {
            position: absolute;        /* 相对定位或绝对定位均可 */
            width:500px;
            height:300px;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background-color: pink;         /* 方便看效果 */

        }

*  水平垂直居中三

        利用 flex 布局
        实际使用时应考虑兼容性

        .container {
            display: flex;
            align-items: center;         /* 垂直居中 */
            justify-content: center;    /* 水平居中 */

        }
        .container div {
            width: 100px;
            height: 100px;
            background-color: pink;        /* 方便看效果 */
        }  

6. display有哪些值?说明他们的作用。

      block           块类型。默认宽度为父元素宽度,可设置宽高,换行显示。
      none            元素不显示,并从文档流中移除。
      inline          行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。
      inline-block  默认宽度为内容宽度,可以设置宽高,同行显示。
      list-item       象块类型元素一样显示,并添加样式列表标记。
      table           此元素会作为块级表格来显示。
      inherit         规定应该从父元素继承 display 属性的值。

7. position的值relative和absolute定位原点是?

      absolute
        生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。
      fixed (老IE不支持)
        生成绝对定位的元素,相对于浏览器窗口进行定位。
      relative
        生成相对定位的元素,相对于其正常位置进行定位。
      static
        默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
      inherit
        规定从父元素继承 position 属性的值。

8. CSS3有哪些新特性?

      新增各种CSS选择器    (: not(.input):所有 class 不是“input”的节点)
        圆角            (border-radius:8px)
      多列布局        (multi-column layout)
      阴影和反射    (Shadow\Reflect)
      文字特效        (text-shadow、)
      文字渲染        (Text-decoration)
      线性渐变        (gradient)
      旋转             (transform)
      缩放,定位,倾斜,动画,多背景
      例如:transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation:

9. 请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

     一个用于页面布局的全新CSS3功能,Flexbox可以把列表放在同一个方向(从上到下排列,从左到右),并让列表能延伸到占用可用的空间。
     较为复杂的布局还可以通过嵌套一个伸缩容器(flex container)来实现。
     采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。
     它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。
     常规布局是基于块和内联流方向,而Flex布局是基于flex-flow流可以很方便的用来做局中,能对不同屏幕大小自适应。
     在布局上有了比以前更加灵活的空间。

     具体:http://www.w3cplus.com/css3/flexbox-basics.html

10 经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

    * png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.

    * 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。

    * IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

      浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}

      这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

      渐进识别的方式,从总体中逐渐排除局部。

      首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
      接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。

      css
          .bb{
              background-color:red;/*所有识别*/
              background-color:#00deff\9; /*IE6、7、8识别*/
              +background-color:#a200ff;/*IE6、7识别*/
              _background-color:#1e0bd1;/*IE6识别*/
          }

    *  IE下,可以使用获取常规属性的方法来获取自定义属性,
       也可以使用getAttribute()获取自定义属性;
       Firefox下,只能使用getAttribute()获取自定义属性。
       解决方法:统一通过getAttribute()获取自定义属性。

    *  IE下,even对象有x,y属性,但是没有pageX,pageY属性;
       Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。

    *  解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。

    *  Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
       可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。

    超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
    L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

11. 为什么要初始化CSS样式。

    - 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

    - 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。

    最简单的初始化方法: * {padding: 0; margin: 0;} (强烈不建议)

    淘宝的样式初始化代码:
    body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
    body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
    h1, h2, h3, h4, h5, h6{ font-size:100%; }
    address, cite, dfn, em, var { font-style:normal; }
    code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
    small{ font-size:12px; }
    ul, ol { list-style:none; }
    a { text-decoration:none; }
    a:hover { text-decoration:underline; }
    sup { vertical-align:text-top; }
    sub{ vertical-align:text-bottom; }
    legend { color:#000; }
    fieldset, img { border:0; }
    button, input, select, textarea { font-size:100%; }
    table { border-collapse:collapse; border-spacing:0; }

12. absolute的containing block(容器块)计算方式跟正常流有什么不同?

    无论属于哪种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,然后再判断:
    1、若此元素为 inline 元素,则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形;
    2、否则,则由这个祖先元素的 padding box 构成。
    如果都找不到,则为 initial containing block。

    补充:
    1. static(默认的)/relative:简单说就是它的父元素的内容框(即去掉padding的部分)
    2. absolute: 向上找最近的定位为absolute/relative的元素
    3. fixed: 它的containing block一律为根元素(html/body),根元素也是initial containing block

13. CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?

对于普通元素visibility:collapse;会将元素完全隐藏,不占据页面布局空间,与display:none;表现相同.
如果目标元素为table,visibility:collapse;将table隐藏,但是会占据页面布局空间.
仅在Firefox下起作用,IE会显示元素,Chrome会将元素隐藏,但是占据空间.

14. position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

如果元素的display为none,那么元素不被渲染,position,float不起作用,如果元素拥有position:absolute;或者position:fixed;属性那么元素将为绝对定位,float不起作用.如果元素float属性不是none,元素会脱离文档流,根据float属性值来显示.有浮动,绝对定位,inline-block属性的元素,margin不会和垂直方向上的其他元素margin折叠.

15. 对BFC规范(块级格式化上下文:block formatting context)的理解?

    (W3C CSS 2.1 规范中的一个概念,它是一个独立容器,决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)
     一个页面是由很多个 Box 组成的,元素的类型和 display 属性,决定了这个 Box 的类型。
     不同类型的 Box,会参与不同的 Formatting Context(决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染,也就是说BFC内部的元素和外部的元素不会互相影响。

16. css定义的权重

    以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
/*权重为1*/
        div{
        }
        /*权重为10*/
        .class1{
        }
        /*权重为100*/
        #id1{
        }
        /*权重为100+1=101*/
        #id1 div{
        }
        /*权重为10+1=11*/
        .class1 div{
        }
        /*权重为10+10+1=21*/
        .class1 .class2 div{
        }
    如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

17. 请解释一下为什么需要清除浮动?清除浮动的方式

清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

    1、父级div定义height;
    2、父级div 也一起浮动;
    3、常规的使用一个class;
        .clearfix::before, .clearfix::after {
            content: " ";
            display: table;
        }
        .clearfix::after {
            clear: both;
        }
        .clearfix {
            *zoom: 1;
        }

    4、SASS编译的时候,浮动元素的父级div定义伪类:after
        &::after,&::before{
            content: " ";
            visibility: hidden;
            display: block;
            height: 0;
            clear: both;
        }

    解析原理:
    1) display:block 使生成的元素以块级元素显示,占满剩余空间;
    2) height:0 避免生成内容破坏原有布局的高度。
    3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
    4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:".",有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”" 仍然会产生额外的空隙;
    5)zoom:1 触发IE hasLayout。

    通过分析发现,除了clear:both用来闭合浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。
假设你现在正用一台显示设备来阅读这篇文章,同时你也想把它投影到屏幕上,或者打印出来,
而显示设备、屏幕投影和打印等这些媒介都有自己的特点,CSS就是为文档提供在不同媒介上展示的适配方法

<!-- link元素中的CSS媒体查询 -->
当媒体查询为真时,相关的样式表或样式规则会按照正常的级联规被应用。
当媒体查询返回假, <link> 标签上带有媒体查询的样式表 仍将被下载 (只不过不会被应用)。

<link rel="stylesheet" media="(max-width: 800px)" href="example.css" />

<!-- 样式表中的CSS媒体查询 -->
包含了一个媒体类型和至少一个使用 宽度、高度和颜色等媒体属性来限制样式表范围的表达式。
CSS3加入的媒体查询使得无需修改内容便可以使样式应用于某些特定的设备范围。

<style>
    @media (min-width: 700px) and (orientation: landscape){
      .sidebar {
        display: none;
      }
    }
</style>

JavaScript

     当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话,
     就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。
        function Func(){}
        Func.prototype.name = "Sean";
        Func.prototype.getInfo = function() {
          return this.name;
        }
        var person = new Func();//现在可以参考var person = Object.create(oldObject);
        console.log(person.getInfo());//它拥有了Func的属性和方法
        //"Sean"
        console.log(Func.prototype);
        // Func { name="Sean", getInfo=function()}
    1、对象字面量的方式

        person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};

    2、用function来模拟无参的构造函数

        function Person(){}
        var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
        }
        person.work();

    3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)

        function Pet(name,age,hobby){
           this.name=name;//this作用域:当前对象
           this.age=age;
           this.hobby=hobby;
           this.eat=function(){
              alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
           }
        }
        var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
        maidou.eat();//调用eat方法

    4、用工厂方式来创建(内置对象)

         var wcDog =new Object();
         wcDog.name="旺财";
         wcDog.age=3;
         wcDog.work=function(){
           alert("我是"+wcDog.name+",汪汪汪......");
         }
         wcDog.work();

    5、用原型方式来创建

        function Dog(){

         }
         Dog.prototype.name="旺财";
         Dog.prototype.eat=function(){
         alert(this.name+"是个吃货");
         }
         var wangcai =new Dog();
         wangcai.eat();

    5、用混合方式来创建

        function Car(name,price){
          this.name=name;
          this.price=price;
        }
         Car.prototype.sell=function(){
           alert("我是"+this.name+",我现在卖"+this.price+"万元");
          }
        var camry =new Car("凯美瑞",27);
        camry.sell();
    Javascript将未赋值的变量默认值设为undefined;
    Javascript从来不会将变量设为null。它是用来让程序员表明某个用var声明的变量时没有值的。

    typeof undefined
        //"undefined"
        undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined;
        例如变量被声明了,但没有赋值时,就等于undefined

    typeof null
        //"object"
        null : 是一个对象(空对象, 没有任何属性和方法);
        例如作为函数的参数,表示该函数的参数不是对象;

    注意:
        在验证null时,一定要使用 === ,因为 == 无法分别 null 和 undefined
         null == undefined // true
          null === undefined // false

    再来一个例子:

        null
        Q:有张三这个人么?
        A:有!
        Q:张三有房子么?
        A:没有!

        undefined
        Q:有张三这个人么?
        A:有!
        Q: 张三有多少岁?
        A: 不知道(没有被告诉)

参考阅读:[undefined与null的区别](http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html)
    执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在    使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源    因为say667()的内部函数的执行需要依赖say667()中的变量    这是对闭包作用的非常直白的描述      function say667() {        // Local variable that ends up within closure        var num = 666;        var sayAlert = function() {            alert(num);        }        num++;        return sayAlert;    }     var sayAlert = say667();     sayAlert()//执行结果应该弹出的667
同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。(待完善)
    // CMD    define(function(require, exports, module) {        var a = require('./a')        a.doSomething()        // 此处略去 100 行        var b = require('./b') // 依赖可以就近书写        b.doSomething()        // ...    })    // AMD 默认推荐    define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好        a.doSomething()        // 此处略去 100 行        b.doSomething()        // ...    })

缓存的?)

    参考:http://annn.me/how-to-realize-cmd-loader/
      例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);

      注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

        function add(a,b)
        {
            alert(a+b);
        }

        function sub(a,b)
        {
            alert(a-b);
        }

        add.call(sub,3,1);
    使用:    jquery.extend扩展,需要通过jquery类来调用,而jquery.fn.extend扩展,所有jquery实例都可以直接调用。
    *jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

    *jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
     提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {
        return JSON.stringify(array)
    }

    $.fn.parseArray = function(array) {
        return JSON.parse(array)
    }

    然后调用:
    $("").stringifyArray(array)
    参考:http://www.tuicool.com/articles/ArQZfui
    function commafy(num) {
        return num && num
            .toString()
            .replace(/(\d)(?=(\d{3})+\.)/g, function($0, $1) {
                return $1 + ",";
            });
    }
    console.log(commafy(1234567.90)); //1,234,567.90

ECMAScript6 相关

前端框架

        更新过程

        * componentWillReceiveProps

        * shouldComponentUpdate

        * componentWillUpdate

        * render

        * componentDidUpdate


        卸载过程

        componentWillUnmount

其他问题

    1、事件不同之处:

           触发事件的元素被认为是目标(target)。而在 IE 中,目标包含在 event 对象的 srcElement 属性;

        获取字符代码、如果按键代表一个字符(shift、ctrl、alt除外),IE 的 keyCode 会返回字符代码(Unicode),DOM 中按键的代码和字符是分离的,要获取字符代码,需要使用 charCode 属性;

        阻止某个事件的默认行为,IE 中阻止某个事件的默认行为,必须将 returnValue 属性设置为 false,Mozilla 中,需要调用 preventDefault() 方法;

        停止事件冒泡,IE 中阻止事件进一步冒泡,需要设置 cancelBubble 为 true,Mozzilla 中,需要调用 stopPropagation();
    *(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
      因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
      此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
      因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

    *(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
      而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。
    前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,

    参与项目,快速高质量完成实现效果图,精确到1px;

    与团队成员,UI设计,产品经理的沟通;

    做好的页面结构,页面重构和用户体验;

    处理hack,兼容、写出优美的代码格式;

    针对服务器的优化、拥抱最新前端技术。
       加班就像借钱,原则应当是------救急不救穷

前端学习网站推荐

1. 极客标签:     http://www.gbtags.com/

2. 码农周刊:     http://weekly.manong.io/issues/

3. 前端周刊:     http://www.feweekly.com/issues

4. 慕课网:       http://www.imooc.com/

5. div.io:         http://div.io

6. Hacker News: https://news.ycombinator.com/news

7. InfoQ:       http://www.infoq.com/

8. w3cplus:     http://www.w3cplus.com/

9. Stack Overflow: http://stackoverflow.com/

10.w3school:    http://www.w3school.com.cn/

11.mozilla:     https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

文档推荐

  1. jQuery 基本原理
  2. JavaScript 秘密花园
  3. CSS参考手册
  4. JavaScript 标准参考教程
  5. ECMAScript 6入门

前端需要注意哪些SEO?

img标签的title和alt有什么区别

doctype是什么,举例常见doctype及特点

常用的 DOCTYPE 声明

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
"http://www.w3.org/TR/html4/frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

HTTP状态码及其含义

常见的状态码:

HTML 全局属性有哪些

201851223235

截取了 w3c上的表格,其实在日常工作中常用的可能只有:id class data-* title style

HTML 元素可以怎么分类

CSS

CSS选择器有哪些

css_choice

介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

CSS优先级算法如何计算

优先级为:

CSS实现元素垂直居中,有哪些方案?

让元素不可见的CSS方案

box-sizing 有哪些属性

2018513111216

标签: 转载 思否 面试

评论:
avatar
Lvtu 2022-03-03 19:48
CSS是个很神奇的东西,有时出问题也是莫名其妙。。。。