精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Web前端筆試115道題(帶答案及解析)

1、html5為什么只需要寫<!doctype html>?

    答:html5不是基于sgml(標(biāo)準(zhǔn)通用標(biāo)記語言),不需要對dtd文件進(jìn)行引用,但是需要doctype來規(guī)范瀏覽器的行為,

    否則瀏覽器將開啟怪異模式,而html4.01基于sgml,需要引入dtd,才能告知瀏覽器文檔使用的文檔類型

2、行內(nèi)元素有哪些?塊級元素有哪些?空(void)元素有哪些?

    行內(nèi)元素有:a b span img input select strong(強(qiáng)調(diào)的語氣)

    塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4…p

    知名的空元素:

    <br> <hr> <img> <input> <link> <meta>

    鮮為人知的是:

    <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

3、頁面導(dǎo)入樣式時(shí),使用link和@import有什么區(qū)別?

    兩者都是外部引用CSS的方式,但是存在一定的區(qū)別:

  區(qū)別1:link是XHTML標(biāo)簽,除了加載CSS外,還可以定義RSS等其他事務(wù);@import屬于CSS范疇,只能加載CSS。

  區(qū)別2:link引用CSS時(shí),在頁面載入時(shí)同時(shí)加載;@import需要頁面網(wǎng)頁完全載入以后加載。

  區(qū)別3:link是XHTML標(biāo)簽,無兼容問題;@import是在CSS2.1提出的,低版本的瀏覽器不支持。

  區(qū)別4:link支持使用Javascript控制DOM去改變樣式;而@import不支持。

    補(bǔ)充:@import最優(yōu)寫法

    @import的寫法一般有下列幾種:

    @import ‘style.css’ //Windows IE4/ NS4, Mac OS X IE5, Macintosh IE4/IE5/NS4不識別

    @import “style.css” //Windows IE4/ NS4, Macintosh IE4/NS4不識別

    @import url(style.css) //Windows NS4, Macintosh NS4不識別

    @import url(‘style.css’) //Windows NS4, Mac OS X IE5, Macintosh IE4/IE5/NS4不識別

    @import url(“style.css”) //Windows NS4, Macintosh NS4不識別

    由上分析知道,@import url(style.css) 和@import url(“style.css”)是最優(yōu)的選擇,兼容的瀏覽器最多。

    從字節(jié)優(yōu)化的角度來看@import url(style.css)最值得推薦。

4、常見的瀏覽器內(nèi)核有哪些?

    使用Trident內(nèi)核的瀏覽器:IE、Maxthon、TT、The World等;

    使用Gecko內(nèi)核的瀏覽器:Netcape6及以上版本、FireFox、MozillaSuite/SeaMonkey;

    使用Presto內(nèi)核的瀏覽器:Opera7及以上版本;

    使用Webkit內(nèi)核的瀏覽器:Safari、Chrome。

5、html5有哪些新特性?移除了哪些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容性問題?如何區(qū)分html和html5?

    新增的元素有繪畫 canvas ,用于媒介回放的 video 和 audio 元素,本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失,而sessionStorage的數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除,此外,還新增了以下的幾大類元素。

    內(nèi)容元素,article、footer、header、nav、section。

    表單控件,calendar、date、time、email、url、search。

    控件元素,webworker, websockt, Geolocation。

    移出的元素有下列這些:

    顯現(xiàn)層元素:basefont,big,center,font, s,strike,tt,u。

    性能較差元素:frame,frameset,noframes。

    如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分HTML和HTML5?

    處理兼容問題有兩種方式:

    1.IE8/IE7/IE6支持通過document.方法產(chǎn)生的標(biāo)簽,利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽。

    2.使用是html5shim框架

    另外,DOCTYPE聲明的方式是區(qū)分HTML和HTML5標(biāo)志的一個(gè)重要因素,此外,還可以根據(jù)新增的結(jié)構(gòu)、功能元素來加以區(qū)分。

6、iframe有哪些優(yōu)缺點(diǎn)?

    優(yōu)點(diǎn):

            1.用來實(shí)現(xiàn)長連接,在websocket不可用的時(shí)候作為一種替代,最開始由google發(fā)明。Comet:基于 HTTP 長連接的”服務(wù)器推”技術(shù)

            2.跨域通信。JavaScript跨域總結(jié)與解決辦法 ,類似的還有瀏覽器多頁面通信,比如音樂播放器,用戶如果打開了多個(gè)tab頁,應(yīng)該只有一個(gè)在播放。

            3.歷史記錄管理,解決ajax化網(wǎng)站響應(yīng)瀏覽器前進(jìn)后退按鈕的方案,在html5的history api不可用時(shí)作為一種替代。

            4.純前端的utf8和gbk編碼互轉(zhuǎn)。比如在utf8頁面需要生成一個(gè)gbk的encodeURIComponent字符串,可以通過頁面加載一個(gè)gbk的iframe,然后主頁面與子頁面通信的方式實(shí)現(xiàn)轉(zhuǎn)換,這樣就不用在頁面上插入一個(gè)非常巨大的編碼映射表文件了

    缺點(diǎn):

             1、在網(wǎng)頁中使用框架結(jié)構(gòu)最大的弊病是搜索引擎的”蜘蛛”程序無法解讀這種頁面。當(dāng)”蜘蛛”程序遇到由數(shù)個(gè)框架組成的網(wǎng)頁時(shí),它們只看到框架而 無法找到鏈接,因此它們會以為該網(wǎng)站是個(gè)死站點(diǎn),并且很快轉(zhuǎn)身離去。對一個(gè)網(wǎng)站來說這無異于一場災(zāi)難。

          如果你想銷售產(chǎn)品,你需要客戶;如想得到客戶,你首先要讓人們訪問你的網(wǎng)站,而要做到這一點(diǎn),你就非求助于搜索引擎不可。你花費(fèi)了大量的時(shí)間、 精力和金錢開設(shè)了一家網(wǎng)上商店,卻又故意不讓搜索引擎檢索你,這就好象開家零售商店,卻將窗戶全部漆成黑色,而且還不掛任何招牌一樣。

          2、框架結(jié)構(gòu)有時(shí)會讓人感到迷惑,特別是在幾個(gè)框架中都出現(xiàn)上下、左右滾動(dòng)條的時(shí)候。這些滾動(dòng)條除了會擠占已經(jīng)非常有限的頁面空間外,還會分散 訪問者的注意力。訪問者遇到這種網(wǎng)站往往會立刻轉(zhuǎn)身離開。他們會想,既然你的主頁如此混亂,那么網(wǎng)站的其他部分也許更不值得瀏覽。

          3、鏈接導(dǎo)航問題。使用框架結(jié)構(gòu)時(shí),你必須保證正確設(shè)置所有的導(dǎo)航鏈接,如不然,會給訪問者帶來很大的麻煩。比如被鏈接的頁面出現(xiàn)在導(dǎo)航框架 內(nèi),這種情況下訪問者便被陷住了,因?yàn)榇藭r(shí)他沒有其他地方可去。

7、label的作用是什么?是怎么使用的?

    Label 中有兩個(gè)屬性是非常有用的,一個(gè)是FOR、另外一個(gè)就是ACCESSKEY了。

    FOR屬性

     功能:表示Label標(biāo)簽要綁定的HTML元素,你點(diǎn)擊這個(gè)標(biāo)簽的時(shí)候,所綁定的元素將獲取焦點(diǎn)。

     用法:<Label FOR=”InputBox”>姓名</Label><input ID=”InputBox” type=”text”>

    ACCESSKEY屬性:

     功能:表示訪問Label標(biāo)簽所綁定的元素的熱鍵,當(dāng)您按下熱鍵,所綁定的元素將獲取焦點(diǎn)。

     用法:<Label FOR=”InputBox” ACCESSKEY=”N”>姓名</Label><input ID=”InputBox” type=”text”>

    局限性:accessKey屬性所設(shè)置的快捷鍵不能與瀏覽器的快捷鍵沖突,否則將優(yōu)先激活瀏覽器的快捷鍵。

8、實(shí)現(xiàn)不使用border,畫出1px高的線,在不同瀏覽器下的Quirksmode和CSSCompat模式下都能保持一致的效果?

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

9、網(wǎng)頁驗(yàn)證碼是干嘛的?是為了解決什么安全問題?

網(wǎng)頁驗(yàn)證碼介紹:”驗(yàn)證碼”的英文表示為CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart),翻譯過來就是”全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測試”,顧名思義,它是用來區(qū)分計(jì)算機(jī)和人類的。在 CAPTCHA 測試中,作為服務(wù)器的計(jì)算機(jī)會自動(dòng)生成一個(gè)問題由用戶來解答。這個(gè)問題可以由計(jì)算機(jī)生成并評判,但是必須只有人類才能解答。由于計(jì)算機(jī)無法解答 CAPTCHA 的問題,所以回答出問題的用戶就可以被認(rèn)為是人類。 CAPTCHA 是由計(jì)算機(jī)來考人類,而不是標(biāo)準(zhǔn)圖靈測試中那樣由人類來考計(jì)算機(jī),因此人們有時(shí)稱 CAPTCHA 是一種反向圖靈測試。

驗(yàn)證碼的原理:服務(wù)器端隨機(jī)生成驗(yàn)證碼字符串,保存在內(nèi)存中,并寫入圖片,發(fā)送給瀏覽器端顯示,瀏覽器端輸入驗(yàn)證碼圖片上字符,然后提交服務(wù)器端,提交的字符和服務(wù)器端保存的該字符比較是否一致,一致就繼續(xù),否則返回提示。攻擊者編寫的robot程序,很難識別驗(yàn)證碼字符,順利的完成自動(dòng)注冊,登錄;而用戶可以識別填寫,所以這就實(shí)現(xiàn)了阻擋攻擊的作用。而圖片的字符識別,就是看圖片上的干擾強(qiáng)度了。就實(shí)際的效果來說,驗(yàn)證碼只是增加攻擊者的難度,而不可能完全的防止。

10、介紹一下標(biāo)準(zhǔn)的css的盒子模型?與低版本IE的盒子模型有什么不同?

    盒子模型有兩種,分別是 ie 盒子模型和標(biāo)準(zhǔn) w3c 盒子模型

    W3C 盒子模型的范圍包括 margin、border、padding、content,并且 content 部分不包含其他部分

    IE 盒子模型的范圍也包括 margin、border、padding、content,和標(biāo)準(zhǔn) W3C 盒子模型不同的是:IE 盒子模型的 content 部分包含了 border 和 pading

11、如何居中div,如何居中一個(gè)浮動(dòng)元素?如何讓絕對定位的div居中?

    a.margin:xpx auto;

    b.確定容器的寬高,這里寬度是必須的,高度可以不設(shè),設(shè)置外層的上外邊距和左外邊距分別是寬高的一半。

     實(shí)現(xiàn)居中關(guān)鍵在于 margin設(shè)置與 position:relative.

    .div {

     width:500px ;

     height:300px;

     margin: -150px 0 0 -250px;

     position:relative;

     left:50%;

     top:50%;

}

c.position:absolute;

        top: 50%;

        left: 50%; 只能把div定位在以紅色圈為起點(diǎn)的位置,加上margin:-100px 0px 0px -100

12、display有哪些值?說明他們的作用?

    block :塊對象的默認(rèn)值。用該值為對象之后添加新行

    none :隱藏對象。與visibility屬性的hidden值不同,其不為被隱藏的對象保留其物理空間

    inline :內(nèi)聯(lián)對象的默認(rèn)值。用該值將從對象中刪除行

    compact :分配對象為塊對象或基于內(nèi)容之上的內(nèi)聯(lián)對象

    marker :指定內(nèi)容在容器對象之前或之后。要使用此參數(shù),對象必須和:after及:before 偽元素一起使用

    inline-table :將表格顯示為無前后換行的內(nèi)聯(lián)對象或內(nèi)聯(lián)容器

    list-item :將塊對象指定為列表項(xiàng)目。并可以添加可選項(xiàng)目標(biāo)志

    run-in :分配對象為塊對象或基于內(nèi)容之上的內(nèi)聯(lián)對象

    table :將對象作為塊元素級的表格顯示

13、position的值relative和absolute的定位原點(diǎn)是什么?

Absolute,CSS中的寫法是:position:absolute; 他的意思是絕對定位,他是參照瀏覽器的左上角,配合TOP、RIGHT、BOTTOM、LEFT(下面簡稱TRBL)進(jìn)行定位,在沒有設(shè)定TRBL,默認(rèn)依據(jù)父級的做標(biāo)原始點(diǎn)為原始點(diǎn)。如果設(shè)定TRBL并且父級沒有設(shè)定position屬性,那么當(dāng)前的absolute則以瀏覽器左上角為原始點(diǎn)進(jìn)行定位,位置將由TRBL決定。

Relative,CSS中的寫法是:position:relative; 他的意思是絕對相對定位,他是參照父級的原始點(diǎn)為原始點(diǎn),無父級則以BODY的原始點(diǎn)為原始點(diǎn),配合TRBL進(jìn)行定位,當(dāng)父級內(nèi)有padding等CSS屬性時(shí),當(dāng)前級的原始點(diǎn)則參照父級內(nèi)容區(qū)的原始點(diǎn)進(jìn)行定位。

14、display設(shè)置為inline-block時(shí),li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?

    行框的排列會受到中間空白(回車空格等等)的影響,這些空白也會被應(yīng)用樣式,占據(jù)空間,所以會有間隔

    解決:設(shè)置ul的font-size為0,缺陷是必須重新在li中去設(shè)置字體大小

15、請解釋下為什么會出現(xiàn)浮動(dòng)和什么時(shí)候需要清除浮動(dòng)?清除浮動(dòng)的方式?

    a.添加新的元素 、應(yīng)用 clear:both;

    b.父級定義 overflow: auto(注意:是父級div也就是這里的 div.outer) 一個(gè)對seo比較友好,另個(gè)hidden對seo不是太友好

        在IE6中還需要觸發(fā) hasLayout ,例如 zoom:1;

    c.據(jù)說是最高大上的方法 :after

        方法:(注意:作用于浮動(dòng)元素的父親)IE6-7不支持:after,

        使用 zoom:1觸發(fā) hasLayout

        {zoom:1;} /*==for IE6/7 Maxthon2==*/

        :after {clear:both;content:’.’;display:block;width: 0;height: 0;visibility:hidden;}

    d.使用 br標(biāo)簽和其自身的 html屬性,<br clear=”all” /> clear=”all | left | right | none” 屬性

    e.父元素也設(shè)置浮動(dòng)

    f.父元素設(shè)置display:table 盒模型屬性已經(jīng)改變,由此造成的一系列問題,得不償失,不推薦使用

16、在網(wǎng)頁中的應(yīng)該使用奇數(shù)還是偶數(shù)的字體?為什么呢?

    偶數(shù)字號相對更容易和 web 設(shè)計(jì)的其他部分構(gòu)成比例關(guān)系

    使用奇數(shù)號字體不好的地方是,文本段落無法對齊

17、margin和padding分別適合什么場景使用?

    何時(shí)應(yīng)當(dāng)使用margin:

    (1)需要在border外側(cè)添加空白時(shí),

    (2)空白處不需要有背景(色)時(shí),

    (3)上下相連的兩個(gè)盒子之間的空白需要相互抵消時(shí),比如15px+20px的margin,將得到20px的空白(注意地方見第三點(diǎn))。

    何時(shí)應(yīng)當(dāng)使用padding

    (1)需要在border內(nèi)側(cè)添加空白時(shí)(往往是文字與邊框距離的設(shè)置),

    (2)空白處需要背景(色)時(shí),

    (3)上下相連的兩個(gè)盒子之間的空白希望等于兩者之和時(shí),比如15px+20px的padding,將得到35px的空白。

    margin使用時(shí)應(yīng)該注意的地方

    margin在垂直方向上相鄰的值相同時(shí)會發(fā)生疊加,水平方向上相鄰的值會相加。margin取負(fù)值時(shí),在垂直方向上,兩個(gè)元素的邊界仍然會重疊。但是,此時(shí)一個(gè)為正值,一個(gè)為負(fù)值,并不是取其中較大的值,而是用正邊界減去負(fù)邊界的絕對值,也就是說,把正的邊界值和負(fù)的邊界值相加。

18、元素豎向的百分比設(shè)定是相對于容器的高度嗎?

    答:相對于父容器的寬度

19、什么是響應(yīng)式設(shè)計(jì)?響應(yīng)式設(shè)計(jì)的基本原理是什么?如何兼容較低版本的IE?

    答:一個(gè)網(wǎng)站能夠兼容多個(gè)終端——而不是為每個(gè)終端做一個(gè)特定的版本。

        優(yōu)點(diǎn):

            面對不同分辨率設(shè)備靈活性強(qiáng)

            能夠快捷解決多設(shè)備顯示適應(yīng)問題

        缺點(diǎn):

            兼容各種設(shè)備工作量大,效率低下

            代碼累贅,會出現(xiàn)隱藏?zé)o用的元素,加載時(shí)間加長

            其實(shí)這是一種折中性質(zhì)的設(shè)計(jì)解決方案,多方面因素影響而達(dá)不到最佳效果

            一定程度上改變了網(wǎng)站原有的布局結(jié)構(gòu),會出現(xiàn)用戶混淆的情況

    respond.js和css3-mediaqueries-js

20、設(shè)置元素浮動(dòng)后,該元素的display值是多少?

    display:block;

21、怎么讓chrome支持小于12px的文字?

    chrome私有屬性:-webkit-text-size-adjust:none;

    -webkit-transform:scale(0.8);

    行內(nèi)元素設(shè)置:-webkit-transform:scale(0.8);display:inline-block

22、display:inline-block什么時(shí)候會顯示間隙?

    1.給 父元素 寫font-size:0

    2.把標(biāo)簽寫到一行,不要在編輯器里敲回車換行,但是這種寫法對于標(biāo)簽很多的情況可讀性太差,適用與例如<a></a><a></a>這樣簡單的結(jié)構(gòu)

23、有一個(gè)高度自適應(yīng)的div。里面有2個(gè)div,一個(gè)高度100px,希望另一個(gè)填滿剩下的高度?

    外層box-sizing: border-box; 同時(shí)設(shè)置padding: 100px 0 0;

    內(nèi)層100像素高的元素向上移動(dòng)100像素,或使用absolute定位防止占據(jù)空間;

    另一個(gè)元素直接height: 100%;

    外層position: relative;

    百分百自適應(yīng)元素直接position: absolute; top: 100px; bottom: 0; left: 0

24、什么是window對象?什么是document對象?

    window它是一個(gè)頂層對象,而不是另一個(gè)對象的屬性即瀏覽器的窗口。

    document對象是window對象的一個(gè)對象屬性

25、null和undefined的區(qū)別?

    null是一個(gè)表示”無”的對象,轉(zhuǎn)為數(shù)值時(shí)為0;undefined是一個(gè)表示”無”的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN。

    null表示”沒有對象”,即該處不應(yīng)該有值

        (1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象。

        (2) 作為對象原型鏈的終點(diǎn)。

    undefined表示”缺少值”,就是此處應(yīng)該有一個(gè)值,但是還沒有定義

        (1)變量被聲明了,但沒有賦值時(shí),就等于undefined。

        (2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined。

        (3)對象沒有賦值的屬性,該屬性的值為undefined。

        (4)函數(shù)沒有返回值時(shí),默認(rèn)返回undefined。

26、什么是閉包(closure)?為什么要用它?

    閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)

    由于在Javascript語言中,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡單理解成”定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”。

    所以,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。

    閉包的用途:

    閉包可以用在許多地方。它的最大用處有兩個(gè),一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中

    重用變量又不能造成全局污染

27、js代碼中”use strict”是什么意思?使用它區(qū)別是什么?

    進(jìn)入”嚴(yán)格模式”的標(biāo)志,老版本的瀏覽器會把它當(dāng)作一行普通字符串,加以忽略

    將”use strict”放在腳本文件的第一行,則整個(gè)腳本都將以”嚴(yán)格模式”運(yùn)行。如果這行語句不在第一行,則無效,整個(gè)腳本以”正常模式”運(yùn)行。如果不同模式的代碼文件合并成一個(gè)文件,這一點(diǎn)需要特別注意。

    (嚴(yán)格地說,只要前面不是產(chǎn)生實(shí)際運(yùn)行結(jié)果的語句,”use strict”可以不在第一行,比如直接跟在一個(gè)空的分號后面。)

    將”use strict”放在函數(shù)體的第一行,則整個(gè)函數(shù)以”嚴(yán)格模式”運(yùn)行

    因?yàn)榈谝环N調(diào)用方法不利于文件合并,所以更好的做法是,借用第二種方法,將整個(gè)腳本文件放在一個(gè)立即執(zhí)行的匿名函數(shù)之中

    – 消除Javascript語法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;

    – 消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;

    – 提高編譯器效率,增加運(yùn)行速度;

    – 為未來新版本的Javascript做好鋪墊。

28、js中有一個(gè)函數(shù),執(zhí)行對象查找時(shí),永遠(yuǎn)不會去查找原型,這個(gè)函數(shù)是什么?

    hasOwnProperty()函數(shù)用于指示一個(gè)對象自身(不包括原型鏈)是否具有指定名稱的屬性。如果有,返回true,否則返回false。該方法屬于Object對象,由于所有的對象都”繼承”了Object的對象實(shí)例,因此幾乎所有的實(shí)例對象都可以使用該方法。

29、js延遲加載的方式有哪些?

js的延遲加載有助與提高頁面的加載速度,以下是延遲加載的幾種方法:

1.使用setTimeout延遲方法的加載時(shí)間

延遲加載js代碼,給網(wǎng)頁加載留出更多時(shí)間

<script type=”text/javascript” >

function A(){

$.post(“/lord/login”,{name:username,pwd:password},function(){

alert(“Hello”);

});

}

$(function (){

setTimeout(‘A()’, 1000); //延遲1秒

})

</script>

2.讓js最后加載

例如引入外部js腳本文件時(shí),如果放入html的head中,則頁面加載前該js腳本就會被加載入頁面,而放入body中,則會按照頁面從上倒下的加載順序來運(yùn)行JavaScript的代碼~~~ 所以我們可以把js外部引入的文件放到頁面底部,來讓js最后引入,從而加快頁面加載速度

3.上述方法2也會偶爾讓你收到Google頁面速度測試工具的”延遲加載javascript”警告。所以這里的解決方案將是來自Google幫助頁面的推薦方案。

//這些代碼應(yīng)被放置在</body>標(biāo)簽前(接近HTML文件底部)

<script type=”text/javascript”>

function downloadJSAtOnload() {

var element = document.createElement(“script”);

element.src = “defer.js”;

document.body.appendChild(element);

}

if (window.addEventListener)

window.addEventListener(“l(fā)oad”, downloadJSAtOnload, false);

else if (window.attachEvent)

window.attachEvent(“onload”, downloadJSAtOnload);

else window.onload = downloadJSAtOnload;

</script>

這段代碼意思是等到整個(gè)文檔加載完后,再加載外部文件”defer.js”。

使用此段代碼的步驟:

1).復(fù)制上面代碼

2).粘貼代碼到HTML的標(biāo)簽前 (靠近HTML文件底部)

3).修改”defer.js”為你的外部JS文件名

4).確保你文件路徑是正確的。例如:如果你僅輸入”defer.js”,那么”defer.js”文件一定與HTML文件在同一文件夾下。

注意:這段代碼直到文檔加載完才會加載指定的外部js文件。因此,不應(yīng)該把那些頁面正常加載需要依賴的javascript代碼放在這里。而應(yīng)該將JavaScript代碼分成兩組。一組是因頁面需要而立即加載的javascript代碼,另外一組是在頁面加載后進(jìn)行操作的javascript代碼(例如添加click事件或其他東西)。這些需等到頁面加載后再執(zhí)行的JavaScript代碼,應(yīng)放在一個(gè)外部文件,然后再引進(jìn)來。

30、同步和異步的區(qū)別?

同步就是指一個(gè)進(jìn)程在執(zhí)行某個(gè)請求的時(shí)候,若該請求需要一段時(shí)間才能返回信息,那么這個(gè)進(jìn)程將會一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去;異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)。當(dāng)有消息返回時(shí)系統(tǒng)會通知進(jìn)程進(jìn)行處理,這樣可以提高執(zhí)行的效率。

    舉個(gè)瀏覽器例子:普通B/S模式(同步)AJAX技術(shù)(異步)

同步:提交請求->等待服務(wù)器處理->處理完畢返回 這個(gè)期間客戶端瀏覽器不能干任何事

異步: 請求通過事件觸發(fā)->服務(wù)器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

再舉個(gè)生活的例子:大家聯(lián)系的時(shí)候如果使用手機(jī)通話,那么只能跟一個(gè)人聯(lián)系,過程中做不了其他任何操作,如果使用短信或者聊天的方式,就可以同時(shí)跟很多人聊天,別人收到信息后會回復(fù),在回復(fù)之前還可以跟另外的人進(jìn)行聊天。

31、document.write和innerHTML的區(qū)別?

    1.document.write是直接寫入到頁面的內(nèi)容流,如果在寫之前沒有調(diào)用document.open, 瀏覽器會自動(dòng)調(diào)用open。每次寫完關(guān)閉之后重新調(diào)用該函數(shù),會導(dǎo)致頁面被重寫。

    2.innerHTML則是DOM頁面元素的一個(gè)屬性,代表該元素的html內(nèi)容。你可以精確到某一個(gè)具體的元素來進(jìn)行更改。如果想修改document的內(nèi)容,則需要修改document.documentElement.innerElement。

    3.兩者都可動(dòng)態(tài)包含外部資源如JavaScript文件

    通過document.write插入<script></script>元素會自動(dòng)執(zhí)行其中的腳本;

    大多數(shù)瀏覽器中,通過innerHTML插入<script></script>元素并不會執(zhí)行其中的腳本

    innerHTML很多情況下都優(yōu)于document.write,其原因在于其允許更精確的控制要刷新頁面的那一個(gè)部分。

32、.call()和.apply()的含義和區(qū)別?

    1、call,apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對象實(shí)例(就是每個(gè)方法)都有call,apply屬性。既然作為方法的屬性,那它們的使用就當(dāng)然是針對方法的了,這兩個(gè)方法是容易混淆的,因?yàn)樗鼈兊淖饔靡粯?,只是使用方式不同?/p>

    2、語法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);

    3、相同點(diǎn):兩個(gè)方法產(chǎn)生的作用是完全一樣的。

    4、不同點(diǎn):方法傳遞的參數(shù)不同,單個(gè)單數(shù)傳入,另一個(gè)可以以數(shù)組方式傳入

33、JQ和JQUI有啥區(qū)別?

jQuery是一個(gè)快速、簡潔的JavaScript框架,是繼Prototype之后又一個(gè)優(yōu)秀的JavaScript代碼庫(或JavaScript框架)。jQuery設(shè)計(jì)的宗旨是”write Less,Do More”,即倡導(dǎo)寫更少的代碼,做更多的事情。它封裝JavaScript常用的功能代碼,提供一種簡便的JavaScript設(shè)計(jì)模式,優(yōu)化HTML文檔操作、事件處理、動(dòng)畫設(shè)計(jì)和Ajax交互。

jQuery UI 是建立在 jQuery JavaScript 庫上的一組用戶界面交互、特效、小部件及主題。

34、需求:實(shí)現(xiàn)一個(gè)頁面操作不會整頁刷新的網(wǎng)站,并且能在瀏覽器的前進(jìn),后退時(shí)正確響應(yīng)。給出你的技術(shù)實(shí)現(xiàn)方案?

    用cookie或者localStorage來記錄應(yīng)用的狀態(tài)即可,刷新頁面時(shí)讀取一下這個(gè)狀態(tài),然后發(fā)送相應(yīng)ajax請求來改變頁面即可

    HTML5里引用了新的API,就是history.pushState和history.replaceState,就是通過這個(gè)接口做到無刷新改變頁面URL的

    雖然ajax可以無刷新改變頁面內(nèi)容,但無法改變頁面URL

    其次為了更好的可訪問性,內(nèi)容發(fā)生改變后,改變URL的hash。但是hash的方式不能很好的處理瀏覽器的前進(jìn)、后退等問題

    有的瀏覽器引入了onhashchange的接口,不支持的瀏覽器只能定時(shí)去判斷hash是否改變

    再有,ajax的使用對搜索引擎很不友好,往往蜘蛛爬到的區(qū)域是空的

    為了解決傳統(tǒng)ajax帶來的問題,HTML5里引入了新的API,即:history.pushState, history.replaceState

    可以通過pushState和replaceState接口操作瀏覽器歷史,并且改變當(dāng)前頁面的URL。

    pushState是將指定的URL添加到瀏覽器歷史里,replaceState是將指定的URL替換當(dāng)前的URL。

    如何調(diào)用

    var state = {    title: title,    url: options.url,    otherkey: othervalue};window.history.pushState(state, document.title, url);

    state對象除了要title和url之外,也可以添加其他的數(shù)據(jù),比如:還想將一些發(fā)送ajax的配置給保存起來。

    replaceState和pushState是相似的,不需要多做解釋。

    如何響應(yīng)瀏覽器的前進(jìn)、后退操作

    window對象上提供了onpopstate事件,上面?zhèn)鬟f的state對象會成為event的子對象,這樣就可以拿到存儲的title和URL了。

    window.addEventListener(‘popstate’, function(e){ if (history.state){    var state = e.state; //do something(state.url, state.title); }}, false);

    這樣就可以結(jié)合ajax和pushState完美的進(jìn)行無刷新瀏覽了。

35、js的數(shù)據(jù)類型都有哪些?

    字符串、數(shù)字、布爾、數(shù)組、對象、Null、Undefined

36、已知ID的input輸入框,希望獲取這個(gè)輸入框的輸入值,怎么做?(不使用第三方框架)

    document.getElementById(id).value;

37、希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)

    document.getElementsByTagName(‘input’);

    遍歷循環(huán)

38、設(shè)置一個(gè)已知ID的div和html內(nèi)容為xxx,字體顏色設(shè)置為黑色?(不使用第三方框架)

    var div = document.getElementById(id);

    div.innerHTML = ”;

    div.style.color = ”;

39、當(dāng)一個(gè)dom節(jié)點(diǎn)被點(diǎn)擊時(shí),我們需要能夠執(zhí)行一個(gè)函數(shù),應(yīng)該怎么做?

    直接在DOM里綁定事件:”<div onclick=”test()”>xx</div>” …

     在JS里通過onclick綁定:xxx.onclick = test

     通過事件添加進(jìn)行綁定:addEventListener(xxx, ‘click’, test)

      那么問題來了,Javascript的事件流模型都有什么?

    “事件冒泡”:事件開始由最具體的元素接受,然后逐級向上傳播

    “事件捕捉”:事件由最不具體的節(jié)點(diǎn)先接收,然后逐級向下,一直到最具體的

    “DOM事件流”:三個(gè)階段:事件捕捉,目標(biāo)階段,事件冒泡

40、什么是Ajax和JSON,他們的優(yōu)缺點(diǎn)?

    Ajax是異步JavaScript和XML,用于在Web頁面中實(shí)現(xiàn)異步數(shù)據(jù)交互。

  優(yōu)點(diǎn):

        可以使得頁面不重載全部內(nèi)容的情況下加載局部內(nèi)容,降低數(shù)據(jù)傳輸量

        避免用戶不斷刷新或者跳轉(zhuǎn)頁面,提高用戶體驗(yàn)

    缺點(diǎn):

        對搜索引擎不友好(

        要實(shí)現(xiàn)ajax下的前后退功能成本較大

        可能造成請求數(shù)的增加

        跨域問題限制

    JSON是一種輕量級的數(shù)據(jù)交換格式,ECMA的一個(gè)子集

      優(yōu)點(diǎn):輕量級、易于人的閱讀和編寫,便于機(jī)器(JavaScript)解析,支持復(fù)合數(shù)據(jù)類型(數(shù)組、對象、字符串、數(shù)字)

41、請看下列代碼輸出什么?解釋原因?

    var a;

    alert(typeof a); //undefined

    alert(b); //報(bào)錯(cuò)

    解釋:Undefined是一個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)值就是”undefined”,

    在使用var聲明變量但并未對其賦值進(jìn)行初始化時(shí),這個(gè)變量的值就是undefined。而b由于未聲明將報(bào)錯(cuò)。

    注意未申明的變量和聲明了未賦值的是不一樣的。

    ar a = null;

    alert(typeof a); //object

  解釋:null是一個(gè)只有一個(gè)值的數(shù)據(jù)類型,這個(gè)值就是null。表示一個(gè)空指針對象,所以用typeof檢測會返回”object”

42、js的typeof返回哪些數(shù)據(jù)類型?

    有如下6種返回值:

1)number;

2)string;

3)boolean;

4)object

5)function

6)undefined;

43、split() join()的區(qū)別?

    join() 方法用于把數(shù)組中的所有元素放入一個(gè)字符串。

    元素是通過指定的分隔符進(jìn)行分隔的。

    指定分隔符方法join(“#”);其中#可以是任意

    與之相反的是split()方法:用于把一個(gè)字符串分割成字符串?dāng)?shù)組.

44、數(shù)組方法pop() push() unshift() shift()?

    push和pop方法,這兩個(gè)方法只會對數(shù)組從尾部進(jìn)行壓入或彈出,而且是在原數(shù)組進(jìn)行操作,任何的改動(dòng)都是會影響到操作的數(shù)組。push(args)可以每次壓入多個(gè)元素,并返回更新后的數(shù)組長度。pop()函數(shù)每次只會彈出最后一個(gè)結(jié)尾的元素,并返回彈出的元素,如果是對空組數(shù)調(diào)用pop()則返回undefined。 如果參數(shù)是數(shù)組則是將整個(gè)數(shù)組當(dāng)做一個(gè)元素壓入到原來的數(shù)組當(dāng)中。并不會產(chǎn)生類似concat合并數(shù)組時(shí)產(chǎn)生的”拆分現(xiàn)象”

    unshift和shift這兩個(gè)方法都是通過對數(shù)組的頭部進(jìn)行的操作,其他基本跟push和pop類似

    shift:從集合中把第一個(gè)元素刪除,并返回這個(gè)元素的值。

    unshift: 在集合開頭添加一個(gè)或更多元素,并返回新的長度

    push:在集合中添加元素,并返回新的長度

    pop:從集合中把最后一個(gè)元素刪除,并返回這個(gè)元素的值

45、ajax請求時(shí),如何解釋json數(shù)據(jù)?

    1.$.JSON(url,params,fun);

    2.$.ajax({}); dataType:’json’

    都可以使用$each();進(jìn)行遍歷

    $.each(object,function(index,item){

    });

46、js的本地對象,內(nèi)置對象和宿主對象?

    本地對象:

        Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError官方定義好了的對象

    內(nèi)置對象: Global 和 Math,內(nèi)置對象是本地對象的一種

    宿主對象:所有的BOM和DOM對象都是宿主對象,是那些官方未定義,你自己構(gòu)建的對象加上DOM和BOM對象組成的

47、列舉所了解的前端框架并簡述?

以下是常用的前端基礎(chǔ)框架:

以下是常見的前端構(gòu)建框架:

以下是場檢的JS/CSS模塊化開發(fā)的框架:

48、對web標(biāo)準(zhǔn)以及w3c的理解與認(rèn)識?

    (1)web標(biāo)準(zhǔn)規(guī)范要求,書寫標(biāo)簽必須閉合、標(biāo)簽小寫、不亂嵌套,可提高搜索機(jī)器人對網(wǎng)頁內(nèi)容的搜索幾率?!?SEO

    (2)建議使用外鏈css和js腳本,從而達(dá)到結(jié)構(gòu)與行為、結(jié)構(gòu)與表現(xiàn)的分離,提高頁面的渲染速度,能更快地顯示頁面的內(nèi)容。

    (3)樣式與標(biāo)簽的分離,更合理的語義化標(biāo)簽,使內(nèi)容能被更多的用戶所訪問、內(nèi)容能被更廣泛的設(shè)備所訪問、更少的代碼和組件, 從而降低維護(hù)成本、改版更方便

    (4)不需要變動(dòng)頁面內(nèi)容,便可提供打印版本而不需要復(fù)制內(nèi)容,提高網(wǎng)站易用性

    遵循w3c制定的web標(biāo)準(zhǔn),能夠使用戶瀏覽者更方便的閱讀,使網(wǎng)頁開發(fā)者之間更好的交流。

49、xhtml和html有什么區(qū)別?

    XHTML是HTML 4.01和XML1.0的雜交,XHTML1.0是基于HTML4.01的

    HTML是一種基于標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)的應(yīng)用,而XHTML則基于可擴(kuò)展標(biāo)記語言(XML),HTML和XHTML其實(shí)是平行發(fā)展的兩個(gè)標(biāo)準(zhǔn)。本質(zhì)上說,XHTML是一個(gè)過渡技術(shù),結(jié)合了部分XML的強(qiáng)大功能及大多數(shù)HTML的簡單特性。建立XHTML的目的就是實(shí)現(xiàn)HTML向XML的過渡

    1、XHTML要求正確嵌套

    2、XHTML所有元素必須關(guān)閉

    3、XHTML區(qū)分大小寫

    4、XHTML屬性值要加引號

    5、XHTML用id屬性代替name屬性

    6、屬性值不能簡寫

50、行內(nèi)元素有哪些?塊級元素有哪些?css和盒子模型?

    盒子模型:內(nèi)容、填充(padding)、邊框(border)、外邊界(margin)

    box-sizing:border-box; box-sizing:content-box;

51、css選擇器有哪些?哪些屬性可以繼承?優(yōu)先級算法如何計(jì)算?內(nèi)聯(lián)和import哪個(gè)級別更高?

    可繼承的:font-size font-family color

    不可繼承的:border padding margin background-color width height

    優(yōu)先級:!important > [ id > class > tag ] important 比 內(nèi)聯(lián)優(yōu)先級高

52、前端頁面有哪三層構(gòu)成,分別是什么?作用是什么?

    結(jié)構(gòu)層、表示層、行為層

結(jié)構(gòu)層(structural layer)

由 HTML 或 XHTML之類的標(biāo)記語言負(fù)責(zé)創(chuàng)建。標(biāo)簽,也就是那些出現(xiàn)在尖括號里的單詞,對網(wǎng)頁內(nèi)容的語義含義做出了描述,但這些標(biāo)簽不包含任何關(guān)于如何顯示有關(guān)內(nèi)容的信息。例如,P標(biāo)簽表達(dá)了這樣一種語義:”這是一個(gè)文本段?!?/p>

表示層(presentation layer)

由 CSS 負(fù)責(zé)創(chuàng)建。 CSS對”如何顯示有關(guān)內(nèi)容”的問題做出了回答。

行為層(behaviorlayer)

負(fù)責(zé)回答”內(nèi)容應(yīng)該如何對事件做出反應(yīng)”這一問題。這是 Javascript 語言和 DOM主宰的領(lǐng)域

53、你如何對網(wǎng)站的文件和資源進(jìn)行優(yōu)化?期待的解決方法包括?

         A、文件合并,減少http請求,合并JavaScript和CSS文件、CSS Sprites、圖像映射 (Image Map)和使用Data URI來編碼圖片

        B、文件最小化/文件壓縮,減少文件下載的體積;常用的工具是YUI Compressor

        C、使用 CDN 托管,盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母?、更穩(wěn)定

        D、緩存的使用(多個(gè)域名來提供緩存)

        E、GZIP 壓縮你的 JS 和 CSS 文件

54、看下列代碼?輸出什么?解釋原因?

    var a = null;

    alert(typeof a);

答案:輸出為object, JS類型值是存在32 BIT 單元里,32位有1-3位表示TYPE TAG,其它位表示真實(shí)值

而表示object的標(biāo)記位正好是低三位都是0

000: object. The data is a reference to an object.

而js 里的Null 是機(jī)器碼NULL空指針, (0x00 is most platforms).所以空指針引用 加上 對象標(biāo)記還是0,最終體現(xiàn)的類型還是object..

這也就是為什么Number(null)===0吧…

The history of “typeof null”

2. 曾經(jīng)有提案 typeof null === ‘null’.但提案被拒絕

harmony:typeof_null

55、看代碼給答案?并進(jìn)行解釋?

    var a = new Object();

    a.value=1;

    b = a;

    b.value=2;

    alert(a.value);

56、var numberArray = [3,6,2,4,1,5];

    1) 實(shí)現(xiàn)對該數(shù)組的倒排,輸出[5,1,4,2,6,3]

  2) 實(shí)現(xiàn)對該數(shù)組的降序排列,輸出[6,5,4,3,2,1]

         var numberArray = [3,6,2,4,1,5];

         numberArray.reverse(); // 5,1,4,2,6,3

         numberArray.sort(function(a,b){ //6,5,4,3,2,1

         return b-a;

         })

57、你能描述一下漸進(jìn)增強(qiáng)和優(yōu)雅降級之間的不同嗎?

    如果提到了特性檢測,可以加分。

    檢測瀏覽器,漸進(jìn)增強(qiáng)就是讓牛b的瀏覽器的效果更好,優(yōu)雅降級就是讓2b的瀏覽器在功能ok的情況下效果一般。

58、線程與進(jìn)程的區(qū)別?

    一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.

    線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。

    另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。

    線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

    從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。

59、請解釋一下什么是”語義化的 HTML”?

     語義化的好處:

         1:去掉或樣式丟失的時(shí)候能讓頁面呈現(xiàn)清晰的結(jié)構(gòu):

            html本身是沒有表現(xiàn)的,我們看到例如<h1>是粗體,字體大小2em,加粗;<strong>是加粗的,不要認(rèn)為這是html的表現(xiàn),這些其實(shí)html默認(rèn)的css樣式在起作用,所以去掉或樣式丟失的時(shí)候能讓頁面呈現(xiàn)清晰的結(jié)構(gòu)不是

            的HTML結(jié)構(gòu)的優(yōu)點(diǎn),但是瀏覽器都有有默認(rèn)樣式,默認(rèn)樣式的目的也是為了更好的表達(dá)html的語義,可以說瀏覽器的默認(rèn)樣式和語義化的HTML結(jié)構(gòu)是不可分割的。

        2.屏幕閱讀器(如果訪客有視障)會完全根據(jù)你的標(biāo)記來”讀”你的網(wǎng)頁.

        3.PDA、手機(jī)等設(shè)備可能無法像普通電腦的瀏覽器一樣來渲染網(wǎng)頁(通常是因?yàn)檫@些設(shè)備對CSS的支持較弱).

        4.搜索引擎的爬蟲也依賴于標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重.

        5.你的頁面是否對爬蟲容易理解非常重要,因?yàn)榕老x很大程度上會忽略用于表現(xiàn)的標(biāo)記,    而只注重語義標(biāo)記.

        6.便于團(tuán)隊(duì)開發(fā)和維護(hù)

        語義化的HTML就是:標(biāo)題用h1-h6,文字段落用p,列表用ul li,大致如此

60、為什么利用多個(gè)域名來提供網(wǎng)站資源會更有效?

     瀏覽器同一時(shí)間可以從一個(gè)域名下載多少資源?你的瀏覽器能同時(shí)保持對一個(gè)域名的多少連接?

    三個(gè)最主流的原因:

     1. CDN緩存更方便

     2. 突破瀏覽器并發(fā)限制 (你隨便挑一個(gè) G家的 url: https://lh4.googleusercontent.com/- si4dh2myPWk/T81YkSi__AI/AAAAAAAAQ5o/LlwbBRpp58Q/w497-h373/IMG_20120603_163233.jpg, 把前面的 lh4換成 lh3,lh6 啥的,都照樣能夠訪問,像地圖之類的需要大量并發(fā)下載圖片的站點(diǎn),這個(gè)非常重要。)

     3. Cookieless, 節(jié)省帶寬,尤其是上行帶寬 一般比下行要慢。。。

    還有另外兩個(gè)非常規(guī)原因:

     4. 對于UGC的內(nèi)容和主站隔離,防止不必要的安全問題( 上傳js竊取主站cookie之類的) 。

     正是這個(gè)原因要求用戶內(nèi)容的域名必須不是自己主站的子域名,而是一個(gè)完全獨(dú)立的第三方域名。

    5. 數(shù)據(jù)做了劃分,甚至切到了不同的物理集群,通過子域名來分流比較省事. ^_^ 這個(gè)可能被用的不多。

    PS: 關(guān)于Cookie的問題,帶寬是次要的,安全隔離才是主要的。

     關(guān)于多域名,也不是越多越好,雖然服務(wù)器端可以做泛解釋,瀏覽器做dns解釋也是耗時(shí)間的,而且太多域名,如果要走 https的話,還有要多買證書和部署的問題,^_^。

61、請說出三種減少頁面加載時(shí)間的方法。(加載時(shí)間指感知的時(shí)間或者實(shí)際加載時(shí)間)

    1.優(yōu)化圖片

    2.圖像格式的選擇(GIF:提供的顏色較少,可用在一些對顏色要求不高的地方)

    3.優(yōu)化CSS(壓縮合并css,如margin-top,margin-left…)

    4.網(wǎng)址后加斜杠(如www.campr.com/目錄,會判斷這個(gè)”目錄是什么文件類型,或者是目錄。)

    5.標(biāo)明高度和寬度(如果瀏覽器沒有找到這兩個(gè)參數(shù),它需要一邊下載圖片一邊計(jì)算大小,如果圖片很多,瀏覽器需要不斷地調(diào)整頁面。這不但影響速度,也影響瀏覽體驗(yàn)。

    當(dāng)瀏覽器知道了高度和寬度參數(shù)后,即使圖片暫時(shí)無法顯示,頁面上也會騰出圖片的空位,然后繼續(xù)加載后面的內(nèi)容。從而加載時(shí)間快了,瀏覽體驗(yàn)也更好了。)

    6.減少http請求(合并文件,合并圖片)。

62、如果你參與到一個(gè)項(xiàng)目中,發(fā)現(xiàn)他們使用 Tab 來縮進(jìn)代碼,但是你喜歡空格,你會怎么做?

    1.建議這個(gè)項(xiàng)目使用像 EditorConfig (http://editorconfig.org/) 之類的規(guī)范

    2.為了保持一致性,接受項(xiàng)目原有的風(fēng)格

    3.直接使用 VIM 的 retab 命令

63、請寫一個(gè)簡單的幻燈效果頁面

    如果不使用JS來完成,可以加分。(如:純CSS實(shí)現(xiàn)的幻燈片效果)

可以采用CSS3的單選按鈕radio來實(shí)現(xiàn)圖片的切換

64、你都使用哪些工具來測試代碼的性能?

    Profiler, JSPerf(http://jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout), Dromaeo

65、如果今年你打算熟練掌握一項(xiàng)新技術(shù),那會是什么?

    nodejs,html5,css3,less

66、請談一下你對網(wǎng)頁標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)重要性的理解?

    (google)w3c存在的意義就是讓瀏覽器兼容性問題盡量小,首先是他們對瀏覽器開發(fā)者的約束,然后是對開發(fā)者的約束。

67、什么是 FOUC(無樣式內(nèi)容閃爍)?你如何來避免 FOUC?

     FOUC – Flash Of Unstyled Content 文檔樣式閃爍

    <style type=”text/css” media=”all”>@import “../fouc.css”;</style>

    而引用CSS文件的@import就是造成這個(gè)問題的罪魁禍?zhǔn)?。IE會先加載整個(gè)HTML文檔的DOM,然后再去導(dǎo)入外部的CSS文件,因此,在頁面DOM加載完成到CSS導(dǎo)入完成中間會有一段時(shí)間頁面上的內(nèi)容是沒有樣式的,這段時(shí)間的長短跟網(wǎng)速,電腦速度都有關(guān)系。

    解決方法簡單的出奇,只要在<head>之間加入一個(gè)<link>或者<script></script>元素就可以了。

68、doctype(文檔類型)的作用是什么?你知道多少種文檔類型?

     此標(biāo)簽可告知瀏覽器文檔使用哪種 HTML 或 XHTML 規(guī)范。

     該標(biāo)簽可聲明三種 DTD 類型,分別表示嚴(yán)格版本、過渡版本以及基于框架的 HTML 文檔。

    HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。

    XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。

    Standards (標(biāo)準(zhǔn))模式(也就是嚴(yán)格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標(biāo)準(zhǔn)的網(wǎng)頁,而 Quirks

(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計(jì)的網(wǎng)頁。

69、瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什么?

    W3C標(biāo)準(zhǔn)推出以后,瀏覽器都開始采納新標(biāo)準(zhǔn),但存在一個(gè)問題就是如何保證舊的網(wǎng)頁還能繼續(xù)瀏覽,在標(biāo)準(zhǔn)出來以前,很多頁面都是根據(jù)舊的渲染方法編寫的,如果用的標(biāo)準(zhǔn)來渲染,將導(dǎo)致頁面顯示異常。為保持瀏覽器渲染的兼容性,使以前的頁面能夠正常瀏覽,瀏覽器都保留了舊的渲染方法(如:微軟的IE)。這樣瀏覽器渲染上就產(chǎn)生了Quircks mode和Standars mode,兩種渲染方法共存在一個(gè)瀏覽器上。

     IE盒子模型和標(biāo)準(zhǔn)W3C盒子模型:ie的width包括:padding\border。 標(biāo)準(zhǔn)的width不包括:padding\border

    在js中如何判斷當(dāng)前瀏覽器正在以何種方式解析?

     document對象有個(gè)屬性compatMode ,它有兩個(gè)值:

    BackCompat 對應(yīng)quirks mode

     CSS1Compat 對應(yīng)strict mode

70、使用 XHTML 的局限有哪些?

    xhtml要求嚴(yán)格,必須有head、body每個(gè)dom必須要閉合。

    如果頁面使用’application/xhtml+xml’會有什么問題嗎?

     一些老的瀏覽器并不兼容。

    十六、如果網(wǎng)頁內(nèi)容需要支持多語言,你會怎么做?

    編碼UTF-8,空間域名需要支持多瀏覽地址。

    在設(shè)計(jì)和開發(fā)多語言網(wǎng)站時(shí),有哪些問題你必須要考慮?

     1、應(yīng)用字符集的選擇 2、語言書寫習(xí)慣&導(dǎo)航結(jié)構(gòu) 3、數(shù)據(jù)庫驅(qū)動(dòng)型網(wǎng)站

71、data-屬性的作用是什么?

    data-為前端開發(fā)者提供自定義的屬性,這些屬性集可以通過對象的dataset屬性獲取,不支持該屬性的瀏覽器可以通過 getAttribute方法獲取

    <div data-author=”david” data-time=”2011-06-20″ data-comment-num=”10″>…</div>

    div.dataset.commentNum; // 10

    需要注意的是,data-之后的以連字符分割的多個(gè)單詞組成的屬性,獲取的時(shí)候使用駝峰風(fēng)格。

    并不是所有的瀏覽器都支持.dataset屬性,測試的瀏覽器中只有Chrome和Opera支持。

72、如果把 HTML5 看作做一個(gè)開放平臺,那它的構(gòu)建模塊有哪些?

     <nav>, <header>,<section>, <footer>

73、請描述一下 cookies,sessionStorage 和 localStorage 的區(qū)別?

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web請求之間保存數(shù)據(jù)。有了本地?cái)?shù)據(jù),就可以避免數(shù)據(jù)在瀏覽器和服務(wù)器間不必要地來回傳遞。

    sessionStorage、localStorage、cookie都是在瀏覽器端存儲的數(shù)據(jù),其中sessionStorage的概念很特別,引入了一個(gè)”瀏覽器窗口”的概念。sessionStorage是在同源的同窗口(或tab)中,始終存在的數(shù)據(jù)。也就是說只要這個(gè)瀏覽器窗口沒有關(guān)閉,即使刷新頁面或進(jìn)入同源另一頁面,數(shù)據(jù)仍然存在。關(guān)閉窗口后,sessionStorage即被銷毀。同時(shí)”獨(dú)立”打開的不同窗口,即使是同一頁面,sessionStorage對象也是不同的

     cookies會發(fā)送到服務(wù)器端。其余兩個(gè)不會。

     Microsoft指出InternetExplorer8增加cookie限制為每個(gè)域名50個(gè),但I(xiàn)E7似乎也允許每個(gè)域名50個(gè)cookie。

      Firefox每個(gè)域名cookie限制為50個(gè)。

      Opera每個(gè)域名cookie限制為30個(gè)。

    Firefox和Safari允許cookie多達(dá)4097個(gè)字節(jié),包括名(name)、值(value)和等號。

      Opera允許cookie多達(dá)4096個(gè)字節(jié),包括:名(name)、值(value)和等號。

      InternetExplorer允許cookie多達(dá)4095個(gè)字節(jié),包括:名(name)、值(value)和等號。

74、描述下 “reset” CSS 文件的作用和使用它的好處。

     因?yàn)闉g覽器的品種很多,每個(gè)瀏覽器的默認(rèn)樣式也是不同的,所以定義一個(gè)css reset可以使各瀏覽器的默認(rèn)樣式統(tǒng)一。

75、解釋下浮動(dòng)和它的工作原理?

    浮動(dòng)元素脫離文檔流,不占據(jù)空間。浮動(dòng)元素碰到包含它的邊框或者浮動(dòng)元素的邊框停留

76、列舉不同的清除浮動(dòng)的技巧,并指出它們各自適用的使用場景?

    1.使用空標(biāo)簽清除浮動(dòng)。

        這種方法是在所有浮動(dòng)標(biāo)簽后面添加一個(gè)空標(biāo)簽 定義css clear:both. 弊端就是增加了無意義標(biāo)簽。

    2.使用overflow。

        給包含浮動(dòng)元素的父標(biāo)簽添加css屬性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

    3.使用after偽對象清除浮動(dòng)。

        該方法只適用于非IE瀏覽器。具體寫法可參照以下示例。使用中需注意以下幾點(diǎn)。一、該方法中必須為需要清除浮動(dòng)元素的偽對象中設(shè)置 height:0,否則該元素會比實(shí)際高出若干像素;二、content屬性是必須的,但其值可以為空,藍(lán)色理想討論該方法的時(shí)候content屬性的值設(shè)為”.”,但我發(fā)現(xiàn)為空亦是可以的。

    *{margin:0;padding:0;}

     body{font:36px bold; color:#F00; text-align:center;}

     #layout{background:#FF9;}

     #layout:after{display:block;clear:both;content:””;visibility:hidden;height:0;}

     #left{float:left;width:20%;height:200px;background:#DDD;line-height:200px;}

     #right{float:right;width:30%;height:80px;background:#DDD;line-height:80px;}

    <div id=”layout”>

     <div id=”left”>Left</div>

     <div id=”right”>Right</div>

    </div>

77、解釋下 CSS sprites,以及你要如何在頁面或網(wǎng)站中使用它?

    CSS Sprites其實(shí)就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中,再利用CSS的”background-image”,”background- repeat”,”background-position”的組合進(jìn)行背景定位,background-position可以用數(shù)字能精確的定位出背景圖片的位置。

78、你最喜歡的圖片替換方法是什么,你如何選擇使用?

    <h2> <span 圖片丟這里></span>Hello World </h2> 把span背景設(shè)成文字內(nèi)容,這樣又可以保證seo,也有圖片的效果在上面。

    一般都是:alt,title,onerror

79、討論CSS hacks,條件引用或者其他?

    background-color:blue; 各個(gè)瀏覽器都認(rèn)識,這里給firefox用;

     background-color:red\9;\9所有的ie瀏覽器可識別;

     background-color:yellow\0; \0 是留給ie8的

     +background-color:pink; + ie7定了;

     _background-color:orange; _專門留給神奇的ie6;

     :root #test { background-color:purple\9; } :root是給ie9的,

     @media all and (min-width:0px){ #test {background-color:black\0;} } 這個(gè)是老是跟ie搶著認(rèn)\0的神奇的opera,必須加個(gè)\0,不然firefox,chrome,safari也都認(rèn)識。。。

     @media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }最后這個(gè)是瀏覽器新貴chrome和safari的。

80、如何為有功能限制的瀏覽器提供網(wǎng)頁?你會使用哪些技術(shù)和處理方法?

    百度 谷歌 SO SOGOU Bing

81、如何視覺隱藏網(wǎng)頁內(nèi)容,只讓它們在屏幕閱讀器中可用?

     1.display:none;的缺陷

         搜索引擎可能認(rèn)為被隱藏的文字屬于垃圾信息而被忽略

         屏幕閱讀器(是為視覺上有障礙的人設(shè)計(jì)的讀取屏幕內(nèi)容的程序)會忽略被隱藏的文字。

     2. visibility: hidden ;的缺陷

         這個(gè)大家應(yīng)該比較熟悉就是隱藏的內(nèi)容會占據(jù)他所應(yīng)該占據(jù)物理空間

     3.overflow:hidden;一個(gè)比較合理的方法

         .texthidden { display:block;/*統(tǒng)一轉(zhuǎn)化為塊級元素*/ overflow: hidden; width: 0; height: 0; }

         就像上面的一段CSS所展示的方法,將寬度和高度設(shè)定為0,然后超過部分隱藏,就會彌補(bǔ)上述一、二方法中的缺陷,也達(dá)到了隱藏內(nèi)容的目的。

82、你用過柵格系統(tǒng)嗎?如果使用過,你最喜歡哪種?

    比如:Bootstrap,流式柵格系統(tǒng)

83、你用過媒體查詢,或針對移動(dòng)端的布局/CSS 嗎?

    @media screen and (min-width: 400px) and (max-width: 700px) { … }

    @media handheld and (min-width: 20em), screen and (min-width: 20em) {….}

    媒體查詢,就是響應(yīng)式布局。

84、你熟悉 SVG 樣式的書寫嗎?

    <svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”>

        <circle cx=”40″ cy=”40″ r=”24″ style=”stroke:#006600; fill:#00cc00″/>

        <text x=”250″ y=”150″ font-family=”Verdana” font-size=”10px” fill=”blue”>Hello, out there</text>

        <defs><style type=”text/css”> <![CDATA[.sample{stroke:blue;fill:#0080FF;opacity:1;}]]></style></defs>

        <use xlink:href=”#sample1″ class=”sample”/>

    </svg>

85、如何優(yōu)化網(wǎng)頁的打印樣式?

    <link rel=”stylesheet” type=”text/css” media=”screen” href=”xxx.css” />

     其中media指定的屬性就是設(shè)備,顯示器上就是screen,打印機(jī)則是print,電視是tv,投影儀是projection。

     <link rel=”stylesheet” type=”text/css” media=”print” href=”yyy.css” />

     但打印樣式表也應(yīng)有些注意事項(xiàng):

     1、打印樣式表中最好不要用背景圖片,因?yàn)榇蛴C(jī)不能打印CSS中的背景。如要顯示圖片,請使用html插入到頁面中。

     2、最好不要使用像素作為單位,因?yàn)榇蛴邮奖硪蛴〕鰜淼臅菍?shí)物,所以建議使用pt和cm。

     3、隱藏掉不必要的內(nèi)容。(@print div{display:none;})

     4、打印樣式表中最好少用浮動(dòng)屬性,因?yàn)樗鼈儠А?/p>

     如果想要知道打印樣式表的效果如何,直接在瀏覽器上選擇打印預(yù)覽就可以了。

86、在書寫高效 CSS 時(shí)會有哪些問題需要考慮?

    1.樣式是:從右向左的解析一個(gè)選擇器

    2.ID最快,Universal最慢 有四種類型的key selector,解析速度由快到慢依次是:ID、class、tag和universal

    3.不要tag-qualify (永遠(yuǎn)不要這樣做 ul#main-navigation { } ID已經(jīng)是唯一的,不需要Tag來標(biāo)識,這樣做會讓選擇器變慢。)

    4.后代選擇器最糟糕(換句話說,下面這個(gè)選擇器是很低效的: html body ul li a { })

    5.想清楚你為什么這樣寫

    6.CSS3的效率問題(CSS3選擇器(比如 :nth-child)能夠漂亮的定位我們想要的元素,又能保證我們的CSS整潔易讀。但是這些神奇的選擇器會浪費(fèi)很多的瀏覽器資源。)

    7.我們知道#ID速度是最快的,那么我們都用ID,是不是很快。但是我們不應(yīng)該為了效率而犧牲可讀性和可維護(hù)性

87、使用 CSS 預(yù)處理器的優(yōu)缺點(diǎn)有哪些?

    (SASS,Compass,Stylus,LESS)

    描述下你曾經(jīng)使用過的 CSS 預(yù)處理的優(yōu)缺點(diǎn)

88、如果設(shè)計(jì)中使用了非標(biāo)準(zhǔn)的字體,你該如何去實(shí)現(xiàn)?

     Webfonts (字體服務(wù)例如:Google Webfonts,Typekit 等等。)

89、解釋下瀏覽器是如何判斷元素是否匹配某個(gè) CSS 選擇器?

瀏覽器先產(chǎn)生一個(gè)元素集合,這個(gè)集合往往由最后一個(gè)部分的索引產(chǎn)生(如果沒有索引就是所有元素的集合)。然后向上匹配,如果不符合上一個(gè)部分,就把元素從集合中刪除,直到真?zhèn)€選擇器都匹配完,還在集合中的元素就匹配這個(gè)選擇器了。

舉個(gè)例子,有選擇器:

body.ready #wrapper > .lol233

先把所有 class 中有 lol233 的元素拿出來組成一個(gè)集合,然后上一層,對每一個(gè)集合中的元素,如果元素的 parent id 不為 #wrapper 則把元素從集合中刪去。 再向上,從這個(gè)元素的父元素開始向上找,沒有找到一個(gè) tagName 為 body 且 class 中有 ready 的元素,就把原來的元素從集合中刪去。

至此這個(gè)選擇器匹配結(jié)束,所有還在集合中的元素滿足。

大體就是這樣,不過瀏覽器還會有一些奇怪的優(yōu)化。

為什么從后往前匹配因?yàn)樾屎臀臋n流的解析方向。效率不必說,找元素的父親和之前的兄弟比遍歷所喲兒子快而且方便。關(guān)于文檔流的解析方向,是因?yàn)楝F(xiàn)在的 CSS,一個(gè)元素只要確定了這個(gè)元素在文檔流之前出現(xiàn)過的所有元素,就能確定他的匹配情況。應(yīng)用在即使 html 沒有載入完成,瀏覽器也能根據(jù)已經(jīng)載入的這一部分信息完全確定出現(xiàn)過的元素的屬性。

為什么是用集合主要也還是效率?;?CSS Rule 數(shù)量遠(yuǎn)遠(yuǎn)小于元素?cái)?shù)量的假設(shè)和索引的運(yùn)用,遍歷每一條 CSS Rule 通過集合篩選,比遍歷每一個(gè)元素再遍歷每一條 Rule 匹配要快得多。

90、解釋一下你對盒模型的理解,以及如何在 CSS 中告訴瀏覽器使用不同的盒模型來渲染你的布局。

所有HTML元素可以看作盒子,在CSS中,”box model”這一術(shù)語是用來設(shè)計(jì)和布局時(shí)使用。

CSS盒模型本質(zhì)上是一個(gè)盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充,和實(shí)際內(nèi)容。

盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。

下面的圖片說明了盒子模型(Box Model):

不同部分的說明:

  • Margin(外邊距) – 清除邊框外的區(qū)域,外邊距是透明的。
  • Border(邊框) – 圍繞在內(nèi)邊距和內(nèi)容外的邊框。
  • Padding(內(nèi)邊距) – 清除內(nèi)容周圍的區(qū)域,內(nèi)邊距是透明的。
  • Content(內(nèi)容) – 盒子的內(nèi)容,顯示文本和圖像。

91、解釋下事件代理?

    JavaScript事件代理則是一種簡單的技巧,通過它你可以把事件處理器添加到一個(gè)父級元素上,這樣就避免了把事件處理器添加到多個(gè)子級元素上。

     當(dāng)我們需要對很多元素添加事件的時(shí)候,可以通過將事件添加到它們的父節(jié)點(diǎn)而將事件委托給父節(jié)點(diǎn)來觸發(fā)處理函數(shù)。這主要得益于瀏覽器的事件冒泡機(jī)制。

     事件代理用到了兩個(gè)在JavaSciprt事件中常被忽略的特性:事件冒泡以及目標(biāo)元素。

     function getEventTarget(e) {

         e = e || window.event;

         return e.target || e.srcElement;

     }

92、解釋下 JavaScript 中 this 是如何工作的?

    this 永遠(yuǎn)指向函數(shù)運(yùn)行時(shí)所在的對象,而不是函數(shù)被創(chuàng)建時(shí)所在的對象。匿名函數(shù)或不處于任何對象中的函數(shù)指向 window

    1.如果是call,apply,with,指定的this是誰,就是誰

    2.普通的函數(shù)調(diào)用,函數(shù)被誰調(diào)用,this就是誰

93、解釋下原型繼承的原理?

    function getProperty(obj, prop) {

        if (obj.hasOwnProperty(prop)) {

            return obj[prop];

        }else if (obj.__proto__ !== null) {

            return getProperty(obj.__proto__, prop);

        }else{

            return undefined;

        }

    }

94、生成時(shí)間戳的兩種方法?

JavaScript 獲取當(dāng)前時(shí)間戳:

第一種方法:

var timestamp = Date.parse(new Date());

結(jié)果:1280977330000

第二種方法:

var timestamp = (new Date()).valueOf();

結(jié)果:1280977330748

第三種方法:

var timestamp=new Date().getTime();

結(jié)果:1280977330748

第一種:獲取的時(shí)間戳是把毫秒改成000顯示,

第二種和第三種是獲取了當(dāng)前毫秒的時(shí)間戳。

95、用原型鏈的方式給Array對象添加一個(gè)數(shù)組去重的方法?

Array.prototype.delRepeat=function() {

//tempRepeat保存重復(fù)數(shù)組項(xiàng)

var tempRepeat = [];

var obj = {}; //保存數(shù)組中每項(xiàng),及其出現(xiàn)的次數(shù)

//遍歷數(shù)組

for (var i = 0; i < this.length; i++) {

if (obj[this[i]]) {

if(obj[this[i]]==1) {

tempRepeat.push(this[i]);

obj[this[i]]++;

delete(this[i]);

}

}

else {

obj[this[i]] = 1;

}

}

this.filter(function(){ return true;});

return tempRepeat;

}

var a=[1,3,”eirkgm”,4,6,”eirkgm”,3,3,”eirkgm”,3,3,3,”eirkgm”,4];

alert(a.delRepeat());

96、定義一個(gè)方法,對所有傳入的數(shù)字參數(shù)的第三位小數(shù)進(jìn)行

四舍五入,使得返回值保留兩位小數(shù),不夠的補(bǔ)0

97、定義一個(gè)方法,實(shí)現(xiàn)階乘

function factorial(num) {

if(num <= 1) {

return 1;

} else {

return num * arguments.callee(num – 1);

}

}

98、定義一段代碼,頁面載入完成1分鐘后非緩存模式刷新當(dāng)前頁面

window.onload=function()

{

setTimeout(function(){

location.reload();//要執(zhí)行刷新的代碼

},60000);

}

99、document.getElementById(“HEAD”).onclick=function(oEvent){

        var A = oEvent.type.B = oEvent.target

    }

    A和B的值是什么?

100、阻止事件默認(rèn)行為和事件冒泡的方法是什么

        默認(rèn)行為:event.preventDefault();

        冒泡:event.stopPropregation();

             event.cancelBubble();

101、把Object的實(shí)例化對象A、B、C合并 賦值給對象C

102、設(shè)置一個(gè)已知ID的DIV的html內(nèi)容為xxx,字體顏色設(shè)置為黑色(不使用第三方框架)

103、當(dāng)一個(gè)DOM節(jié)點(diǎn)被點(diǎn)擊的時(shí)候,我們希望能夠執(zhí)行一個(gè)函數(shù),應(yīng)該怎么做?

直接在DOM里綁定事件:

在JS里通過onclick綁定:xxx.onclick = test

通過事件添加進(jìn)行綁定:addEventListener(xxx, ‘click’, test)

104、什么是Ajax和JSON,他們的優(yōu)缺點(diǎn)?

Ajax是一種異步提交數(shù)據(jù)的方法。

通常在html中,要想重新獲取頁面的數(shù)據(jù)。更新某一個(gè)地方的數(shù)據(jù)時(shí)。就必須得刷新整個(gè)頁面,才能重新刷新數(shù)據(jù)。那么問題來了,當(dāng)我們僅僅只需要更新某一個(gè)小地方的數(shù)據(jù)時(shí)。我們也來刷新整個(gè)頁面的話,就顯得有點(diǎn)麻煩了,于是Ajax就幫我們完成了這個(gè)功能,讓我們單獨(dú)開辟一條道路來進(jìn)行獲取數(shù)據(jù),然后頁面不需要刷新,用JS把AJAX請求的數(shù)據(jù)顯示到該顯示的地方。AJAX叫 無刷新獲取技術(shù)

json 是一種數(shù)據(jù)的載體,可以把他想象成數(shù)組一樣的東西,只不過,它有點(diǎn)牛,就是很多格式都可以自動(dòng)支持。就差不多這樣了。

105、看下列代碼輸出為何?解釋原因?

    var a;

    alert(typeof a);//undefined

    alert(b); //報(bào)錯(cuò)

106、看下列代碼,輸出什么?解釋原因?

    var a = null;

    alert(typeof a); //object

107、看下列代碼,輸出什么?

    1.var undefined;

    2.undefined == null; //true

    3.3==true; // true

    4.2==true; //false

    5.0==false; //true

    6.0==”; //true

    7.NaN == NaN; //false

    8.[]==false; //true

    9.[] == ![]; //true

108、看代碼給答案?

    var a = new Object();

    a.value = 1;

    b = a;

    b.value = 2;

    alert(a.value); //2

109、輸出今天的日期,以YYYY-MM-DD的方式,比如今天是2016年4月12日,則     輸出2016-04-12

var d = new Date();

// 獲取年,getFullYear()返回4位的數(shù)字 //今年:2016

var year = d.getFullYear();

// 獲取月,月份比較特殊,0是1月,11是12月

var month = d.getMonth() + 1;

// 變成兩位

month = month < 10 ? ‘0’ + month : month;

// 獲取日

var day = d.getDate();

day = day < 10 ? ‘0’ + day : day;

alert(year + ‘-‘ + month + ‘-‘ + day);

110、將字符串”<tr><td>{$id}</td><td>${name}</td></tr>”中的${id}替換成10,{$name}替換成Tony(使用正則表達(dá)式)

答案:”<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>”.replace(/{\$id}/g, ’10′).replace(/{\$name}/g, ‘Tony’);

111、為了保證頁面輸出安全,我們經(jīng)常需要對一些特殊的字符進(jìn)行轉(zhuǎn)義,請寫出一個(gè)函數(shù)escapeHtml,將< , > & , ” 進(jìn)行轉(zhuǎn)義

String.prototype.escapeHTML = function
() {                                  

  return
this.replace(/&/g,’&’).replace(/>/g,’>’).replace(/</g,’<’).replace(/”/g,’"’);

};

112、foo = foo || bar ,這行代碼是什么意思?為什么要這樣寫?

foo和bar應(yīng)該都是bool型變量,||是表示 或 的意思,只要foo或者bar有一個(gè)為真,那么這個(gè)表達(dá)式的值就為真,并把它賦給foo

113、看下列代碼,將會輸出什么?

    var foo = 1;

    function(){

        console.log(foo);

        var foo = 2;

        console.log(foo);

    }

結(jié)果:undifined,2

var foo=1; 它的作用域是window;但是函數(shù)體內(nèi)有同名局部變量,在執(zhí)行函數(shù)時(shí),第一句會尋找體內(nèi)變量。

如果想調(diào)用該定義,需明確指定作用域,不指定則默認(rèn)函數(shù)體本身。

console.log(window.foo); //1

114、用js實(shí)現(xiàn)隨機(jī)選取10~100之間的10個(gè)數(shù)字,存入一個(gè)數(shù)組,并且排序

function sortNumber(a,b){

    return a-b;//升序

    //return b-a;//降序

}

//js實(shí)現(xiàn)隨機(jī)選取10–100之間的10個(gè)數(shù)字,存入一個(gè)數(shù)組,并排序

var iArray =[];

function getRandom(iStart,iEnd){

    var iChoice = iStart-iEnd+1;

    return Math.abs(Math.floor(Math.random()*iChoice))+iStart;

}

for(var i=0;i<10;i++){

    iArray.push(getRandom(10,100))

}

iArray.sort(sortNumber);

alert(iArray);

115、寫一個(gè)function 清除字符串前后的空格(兼容所有瀏覽器)

第一種:循環(huán)替換

//供使用者調(diào)用

function trim(s){

return trimRight(trimLeft(s));

}

//去掉左邊的空白

function trimLeft(s){

if(s == null) {

return “”;

}

var whitespace = new String(” \t\n\r”);

var str = new String(s);

if (whitespace.indexOf(str.charAt(0)) != -1) {

var j=0, i = str.length;

while (j < i && whitespace.indexOf(str.charAt(j)) != -1){

j++;

}

str = str.substring(j, i);

}

return str;

}

//去掉右邊的空白 www.2cto.com

function trimRight(s){

if(s == null) return “”;

var whitespace = new String(” \t\n\r”);

var str = new String(s);

if (whitespace.indexOf(str.charAt(str.length-1)) != -1){

var i = str.length – 1;

while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){

i–;

}

str = str.substring(0, i+1);

}

return str;

}

第二種:正則替換

<SCRIPT LANGUAGE=”JavaScript”>

<!–

String.prototype.Trim = function()

{

return this.replace(/(^\s*)|(\s*$)/g, “”);

}

String.prototype.LTrim = function()

{

return this.replace(/(^\s*)/g, “”);

}

String.prototype.RTrim = function()

{

return this.replace(/(\s*$)/g, “”);

}

//–>

</SCRIPT>

//去左空格;

function ltrim(s){

return s.replace(/(^\s*)/g, “”);

}

//去右空格;

function rtrim(s){

return s.replace(/(\s*$)/g, “”);

}

//去左右空格;

function trim(s){

return s.replace(/(^\s*)|(\s*$)/g, “”);

}

第三種:使用jquery

$().trim();

jquery的內(nèi)部實(shí)現(xiàn)為:

function trim(str){

return str.replace(/^(\s|\u00A0)+/,”).replace(/(\s|\u00A0)+$/,”);

}

第四種:使用motools

function trim(str){

return str.replace(/^(\s|\xA0)+|(\s|\xA0)+$/g, ”);

}

第五種:剪裁字符串方式

function trim(str){

str = str.replace(/^(\s|\u00A0)+/,”);

for(var i=str.length-1; i>=0; i–){

if(/\S/.test(str.charAt(i))){

str = str.substring(0, i+1);

break;

}

}

return str;

}

//———————————————————-

// 去掉字符串前后的空格

// 返回值:

// 去除空格后的字符串

//———————————————————-

function trim(param) {

if ((vRet = param) == ”) { return vRet; }

while (true) {

if (vRet.indexOf (‘ ‘) == 0) {

vRet = vRet.substring(1, parseInt(vRet.length));

} else if ((parseInt(vRet.length) != 0) && (vRet.lastIndexOf (‘ ‘) == parseInt(vRet.length) – 1)) {

vRet = vRet.substring(0, parseInt(vRet.length) – 1);

} else {

return vRet;

}

}

}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
2014年最新前端開發(fā)面試題(面霸題庫)
前端開發(fā)面試題 | 菜鳥教程
前端不為人知的一面--前端冷知識集錦
前端工程師面試題匯總
必須了解的css知識,純干貨
2019web前端開發(fā)全新面試題庫 二
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 当雄县| 平湖市| 黔南| 清远市| 陆河县| 常宁市| 长泰县| 富蕴县| 什邡市| 巴东县| 东乡| 梅州市| 永修县| 富平县| 介休市| 凌云县| 时尚| 绥棱县| 柘城县| 莎车县| 大石桥市| 尼木县| 华阴市| 丹东市| 安阳县| 莎车县| 古浪县| 凉城县| 牡丹江市| 滨海县| 上林县| 广河县| 永寿县| 大厂| 冀州市| 盘山县| 永新县| 全椒县| 吉水县| 缙云县| 金门县|