GitHub題目答案及擴(kuò)展

前端面試題建峭,3+1模式囤耳,主要是每天督促自己捏顺,多積累一些基礎(chǔ)知識。
GitHub題目地址:https://github.com/haizlin/fe-interview

第1天:

let arr = [];
function generate() {
    if (arr.length < 5) {
        let randomNumber = Math.ceil(Math.random() * 30 + 2);

        if (arr.indexOf(randomNumber) > -1) {
            generate();
        } else {
            arr.push(randomNumber);
            generate();
        }
    }
}
generate();
console.log(arr);

第2天:
寫一個(gè)方法去掉字符串中的空格

function trim(str, type) {
    let map = {
        left: /^\s+/g,
        right: /\s+$/g,
        both: /^\s+|\s+$/g,
        all: /\s+/g
    };
    // 默認(rèn)情況下澎怒,刪除所有空格
    let reg = type && map[type] ? map[type] : map.all;
    let result = str.replace(reg, '');

    if (type === 'middle') {
        // 獲取左邊空格
        let left = str.match(map.left)[0];
        // 獲取右邊空格
        let right = str.match(map.right)[0];
        result = left + result + right;
    }

    return result;
}

第3天:

??- display: none -> 元素不占據(jù)頁面位置
??- visibility: hidden -> 元素在頁面中占據(jù)位置阶牍,但不可見
??- opacity: 0 -> 透明度為0
?? - 利用position的absolute和relative喷面,再結(jié)合left和top等屬性
?? - transform: rotateX(90deg) / rotateY(90deg) / scale(0)

??針對文本節(jié)點(diǎn):
??- font-size: 0
??- text-indent: 大值

function deleteChar(str, char) {
    if (!str || !char) {
        alert('傳入的字符不合法');
    }
    let index = str.lastIndexOf(char);
    if (index > -1) {
        return str.substring(0, index) + str.substring(index+1); 
    }
    return str;
}

這里主要考察字符串相關(guān)一些方法。

  • str.length:獲取字符串長度
    獲取某個(gè)字符:
  • str.charAt(number) :獲取索引為number的字符
  • str.charCodeAt(number):獲取索引為number的ASCII碼
  • str[number]:含義與str.charAt(number)相同

截取字符串:(均不改變原始字符串)

  • str.substr(start走孽, length)惧辈,若start為負(fù)值,則從末尾開始數(shù)

  • str.substring(start, end?)磕瓷,不包含end的字符串盒齿;有負(fù)數(shù)直接轉(zhuǎn)為0念逞;無end,則默認(rèn)到字符串結(jié)束边翁;end值小于start值翎承,則自動(dòng)交換位置

  • str.slice(start, end?):有負(fù)數(shù)表示從字符串末尾開始,-1表示最后一位符匾,無end叨咖,默認(rèn)到字符串結(jié)束
    與正則相關(guān):
    1)str.replace(substr / RegExp, str):
    ???它將在 stringObject 中查找與 regexp 相匹配的子字符串,然后用 replacement 來替換這些子串啊胶。如果 regexp 具有全局標(biāo)志 g甸各,那么 replace() 方法將替換所有匹配的子串。否則焰坪,它只替換第一個(gè)匹配子串趣倾。

    2)str.search(substr / RegExp):
    ???str中第一個(gè)與 regexp 相匹配的子串的起始位置。
    ???search() 方法不執(zhí)行全局匹配某饰,它將忽略標(biāo)志 g儒恋。它同時(shí)忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開始進(jìn)行檢索露乏,這意味著它總是返回 stringObject 的第一個(gè)匹配的位置碧浊。

3)str.match(RegExp):


image.png

說明:若正則表達(dá)式中無g,則無論執(zhí)行多少次match瘟仿,都只匹配首次出現(xiàn)的子串箱锐,返回結(jié)果為類數(shù)組。matches[0]為匹配項(xiàng)劳较,matches[1]為捕獲組1驹止,依次類推。


image.png

如果正則中有g(shù)观蜗,則返回所有的匹配項(xiàng)臊恋。

第4天

偽類擴(kuò)展:

  1. :first-of-type // 表示一組兄弟元素中其類型的第一個(gè)元素砖第,而不管其在兄弟節(jié)點(diǎn)中的位置如何
    DOM結(jié)構(gòu):
<div>
    <h1>HEAD1</h1>
    <p>第一個(gè)P元素</p>
    <p>第二個(gè)P元素</p>
    <p>第三個(gè)P元素</p>
    <p>第四個(gè)P元素</p>
</div>

style樣式:

p:first-of-type {
        color: #f00;
 }
image.png
<div>
        <p>第一個(gè)P元素<em>p里面的em元素</em></p>
        <em>第二個(gè)em元素</em>
</div>
div em:first-of-type {
            color: #f00;
}
image.png
  1. :last-of-type // 表示一組兄弟節(jié)點(diǎn)中某類型的最后一個(gè)元素

如果寫成parentNode ele:first-of-type的格式撤卢,則選中的元素既包括父元素的子元素的最后一個(gè)選定類別的元素,也包括子元素最后一個(gè)選定類別的元素梧兼,依次類推
DOM結(jié)構(gòu)和樣式表:

<p>
        <em>我沒有顏色 :(</em><br>
        <span><em>我有顏色!</em></span><br>
        <strong>我沒有顏色 :(</strong><br>
        <em>我有顏色 :D</em><br>
        <span>
            <em>我在子元素里放吩,但沒有顏色!</em><br>
            <span style="text-decoration:line-through;">我沒有顏</span> 
            <br>
            <em>我卻有顏色!</em><br>
        </span>
        <br>
        <strong>我也沒有顏色 :(</strong>
</p>
p em:last-of-type {
    color: #8470FF;
}
image.png

3):nth-of-type(an+b)

<div>
        <div>這段不參與計(jì)數(shù)羽杰。</div>
        <p>這是第一段渡紫。</p>
        <p>這是第二段到推。</p>
        <div>這段不參與計(jì)數(shù)。</div>
        <p>這是第三段惕澎。</p>
        <p>這是第四段莉测。</p>
</div>
<style>
  div p:nth-of-type(2n + 1) {
      color: #f00;
  }
  div p:nth-of-type(2n) {
      color: #8B864E;
  }
</style>

image.png

4):nth-last-of-type(an+b) 與:nth-of-type的用法類似,只是這個(gè)倒序計(jì)數(shù)
5):nth-child(an + b)::nth-child(an+b)這個(gè) [CSS 偽類]首先找到所有當(dāng)前元素的兄弟元素集灌,然后按照位置先后順序從1開始排序悔雹,選擇的結(jié)果為第(an+b)個(gè)元素的集合(n=0,1欣喧,2腌零,3...(從1開始計(jì)數(shù)

  • 0n+3 或簡單的 3 匹配第三個(gè)元素。
  • 1n+0 或簡單的 n 匹配每個(gè)元素唆阿。(兼容性提醒:在 Android 瀏覽器 4.3 以下的版本 n 和 1n 的匹配方式不一致益涧。1n 和 1n+0 是一致的,可根據(jù)喜好任選其一來使用驯鳖。)
  • 2n+0 或簡單的 2n 匹配位置為 2闲询、4、6浅辙、8...的元素(n=0時(shí)扭弧,2n+0=0,第0個(gè)元素不存在记舆,因?yàn)槭菑?開始排序)鸽捻。你可以使用關(guān)鍵字 even 來替換此表達(dá)式。
  • 2n+1 匹配位置為 1泽腮、3御蒲、5、7...的元素诊赊。你可以使用關(guān)鍵字 odd 來替換此表達(dá)式厚满。
  • 3n+4 匹配位置為 4、7碧磅、10碘箍、13...的元素
    6):nth-last-child(an + b): 與nth-child(an + b)的功能類似,只是該方法倒序計(jì)數(shù)
    7):first-child表示一組兄弟節(jié)點(diǎn)中的第一個(gè)
<div>
      <p>This text is selected!</p>
      <p>This text isn't selected.</p>
    </div>

    <div>
      <h2>This text isn't selected: it's not a `p`.</h2>
      <p>This text isn't selected.</p>
</div>
<style>
p:first-child {
    color: #FFD700;
}
</style>

image.png

8):last-child 父元素的最后一個(gè)子元素
9):only-child父元素的唯一子元素(可一直追溯到子元素的子元素)-->等價(jià)于:first-child:last-child / :nth-child(1):nth-last-child(1)

<main>
      <div>
        <i>I am a lonely only child.</i>
      </div>

      <div>
        <i>I have siblings.</i><br>
        <b>So do I!</b><br>
        <span>I also have siblings, <span>but this is an only child.</span></span>
      </div>
</main>
<style>
  main :only-child {
    color: #f00;
  }
</style>
image.png

10):only-of-type 在所有的子元素中鲸郊,只選中唯一類型的元素敲街,而不管該元素有多少個(gè)兄弟節(jié)點(diǎn)。

<main id="main">
      <div>I am `div` #1.</div>
      <p>I am the only `p` among my siblings.</p>
      <div>I am `div` #2.</div>
      <div>I am `div` #3.
        <i>I am the only `i` child.</i>
        <em>I am `em` #1.</em>
        <em>I am `em` #2.</em>
      </div>
</main>
<style>
  #main :only-of-type {
    color: #0f0;
  }
</style>
image.png

11)關(guān)于a鏈接 :link :visited :hover :active這四個(gè)屬性的定義順序?yàn)椋篖ove Hate

        a:link {
            color: #FFD39B;
        }
        a:visited {
            color: #FF6A6A;
        }

        a:hover {
            color: #FFC1C1;
        }
        a:active {
            color: #DAA520;
        }

定義順序不對严望,可能會導(dǎo)致:active偽類失效

12):focus當(dāng)用戶點(diǎn)擊或觸摸元素或通過鍵盤的 “tab” 鍵選擇它時(shí)會被觸發(fā)

偽元素?cái)U(kuò)展:

::before: {
}
::after {
}
// selection支持的元素:color  、background-color 逻恐、cursor 像吻、caret-color(插入光標(biāo)的顏色)峻黍、outline 、 text-decoration 拨匆、text-emphasis-color姆涩、text-shadow 
// 參考:[https://developer.mozilla.org/zh-CN/docs/Web/CSS/::selection](https://developer.mozilla.org/zh-CN/docs/Web/CSS/::selection)

::selection {
  background-color: cyan;
}
// 首行
::first-line {
}
// 首個(gè)字符(中文或者應(yīng)為)
::first-letter {
}

第5天

function convertCase(str) {
    if (!str || (typeof str !== 'string')) {
        alert('請輸入正確的字符串');
        return;
    }
    for (var i = 0, len = str.length; i < len; i++) {
        str = str.replace(str[i], str[i].search(/[a-z]/) > -1 ? str[i].toUpperCase() : str[i].toLowerCase());
    }
}
// 使用了字符串的全局匹配
function convertCase(str) {
    return str.replace(/([a-z]*)([A-Z]*)/g, function (m, $1, $2) {
        return $1.toUpperCase() + $2.toLowerCase();
    });
}

還可通過比較ASCII值來確定輸入值是小寫還是大寫,但個(gè)人感覺不是很妥台腥,還得需要記住ASCII值的大小宏赘。

第6天

第7天

function count(str, target) {
  var reg = new RegExp(target, 'g');
  var count = 0;
  while(reg.test(str)) {
    count++
  }
  return count;
}

GitHub上別人的代碼:

// 1
function count(str, target) {
  var reg = new RegExp(target, 'g');
  return str.match(reg).length;
}
// 2
function count(str, target) {
  return str.split(target).length - 1;
}

第8天

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末誊辉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子亡脑,更是在濱河造成了極大的恐慌堕澄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霉咨,死亡現(xiàn)場離奇詭異蛙紫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)途戒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門坑傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喷斋,你說我怎么就攤上這事唁毒∷廛睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵浆西,是天一觀的道長粉私。 經(jīng)常有香客問我,道長近零,這世上最難降的妖魔是什么诺核? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮久信,結(jié)果婚禮上窖杀,老公的妹妹穿的比我還像新娘。我一直安慰自己入篮,他們只是感情好陈瘦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潮售,像睡著了一般痊项。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酥诽,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天鞍泉,我揣著相機(jī)與錄音,去河邊找鬼肮帐。 笑死咖驮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的训枢。 我是一名探鬼主播托修,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恒界!你這毒婦竟也來了睦刃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤十酣,失蹤者是張志新(化名)和其女友劉穎涩拙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耸采,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兴泥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虾宇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搓彻。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出好唯,到底是詐尸還是另有隱情竭沫,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布骑篙,位于F島的核電站,受9級特大地震影響森书,放射性物質(zhì)發(fā)生泄漏靶端。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一凛膏、第九天 我趴在偏房一處隱蔽的房頂上張望杨名。 院中可真熱鬧,春花似錦猖毫、人聲如沸台谍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趁蕊。三九已至,卻和暖如春仔役,著一層夾襖步出監(jiān)牢的瞬間掷伙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工又兵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留任柜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓沛厨,卻偏偏與公主長得像宙地,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子逆皮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 請參看我github中的wiki宅粥,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,127評論 2 19
  • 一页屠、理論基礎(chǔ)知識部分 1.1粹胯、講講輸入完網(wǎng)址按下回車,到看到網(wǎng)頁這個(gè)過程中發(fā)生了什么 a. 域名解析 b. 發(fā)起T...
    我家媳婦蠢蠢噠閱讀 3,126評論 2 106
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化辰企,入門級到專家級风纠,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,582評論 0 7
  • 本章轉(zhuǎn)載自新浪博客網(wǎng)友:blog.sina.com.cn/s/blog_7f5571aa0102w2tv.html...
    czboy閱讀 1,458評論 0 11
  • 第一部分HTML&CSS整理答案1.什么是HTML5牢贸? 答:HTML5是最新的HTML標(biāo)準(zhǔn)竹观。 注意:講述HTML5...
    Programmer客棧閱讀 2,013評論 0 12