GitHub题目答案及扩展

前端面试题,3+1模式,主要是每天督促自己,多积累一些基础知识。
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天:
写一个方法去掉字符串中的空格

function trim(str, type) {
    let map = {
        left: /^\s+/g,
        right: /\s+$/g,
        both: /^\s+|\s+$/g,
        all: /\s+/g
    };
    // 默认情况下,删除所有空格
    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 -> 元素不占据页面位置
  - visibility: hidden -> 元素在页面中占据位置,但不可见
  - opacity: 0 -> 透明度为0
   - 利用position的absolute和relative,再结合left和top等属性
   - transform: rotateX(90deg) / rotateY(90deg) / scale(0)

  针对文本节点:
  - 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;
}

这里主要考察字符串相关一些方法。

  • str.length:获取字符串长度
    获取某个字符:
  • str.charAt(number) :获取索引为number的字符
  • str.charCodeAt(number):获取索引为number的ASCII码
  • str[number]:含义与str.charAt(number)相同

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

  • str.substr(start, length),若start为负值,则从末尾开始数

  • str.substring(start, end?),不包含end的字符串;有负数直接转为0;无end,则默认到字符串结束;end值小于start值,则自动交换位置

  • str.slice(start, end?):有负数表示从字符串末尾开始,-1表示最后一位,无end,默认到字符串结束
    与正则相关:
    1)str.replace(substr / RegExp, str):
       它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

    2)str.search(substr / RegExp):
       str中第一个与 regexp 相匹配的子串的起始位置。
       search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

3)str.match(RegExp):


image.png

说明:若正则表达式中无g,则无论执行多少次match,都只匹配首次出现的子串,返回结果为类数组。matches[0]为匹配项,matches[1]为捕获组1,依次类推。


image.png

如果正则中有g,则返回所有的匹配项。

第4天

伪类扩展:

  1. :first-of-type // 表示一组兄弟元素中其类型的第一个元素,而不管其在兄弟节点中的位置如何
    DOM结构:
<div>
    <h1>HEAD1</h1>
    <p>第一个P元素</p>
    <p>第二个P元素</p>
    <p>第三个P元素</p>
    <p>第四个P元素</p>
</div>

style样式:

p:first-of-type {
        color: #f00;
 }
image.png
<div>
        <p>第一个P元素<em>p里面的em元素</em></p>
        <em>第二个em元素</em>
</div>
div em:first-of-type {
            color: #f00;
}
image.png
  1. :last-of-type // 表示一组兄弟节点中某类型的最后一个元素

如果写成parentNode ele:first-of-type的格式,则选中的元素既包括父元素的子元素的最后一个选定类别的元素,也包括子元素最后一个选定类别的元素,依次类推
DOM结构和样式表:

<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>这段不参与计数。</div>
        <p>这是第一段。</p>
        <p>这是第二段。</p>
        <div>这段不参与计数。</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的用法类似,只是这个倒序计数
5):nth-child(an + b)::nth-child(an+b)这个 [CSS 伪类]首先找到所有当前元素的兄弟元素,然后按照位置先后顺序从1开始排序,选择的结果为第(an+b)个元素的集合(n=0,1,2,3...(从1开始计数

  • 0n+3 或简单的 3 匹配第三个元素。
  • 1n+0 或简单的 n 匹配每个元素。(兼容性提醒:在 Android 浏览器 4.3 以下的版本 n 和 1n 的匹配方式不一致。1n 和 1n+0 是一致的,可根据喜好任选其一来使用。)
  • 2n+0 或简单的 2n 匹配位置为 2、4、6、8...的元素(n=0时,2n+0=0,第0个元素不存在,因为是从1开始排序)。你可以使用关键字 even 来替换此表达式。
  • 2n+1 匹配位置为 1、3、5、7...的元素。你可以使用关键字 odd 来替换此表达式。
  • 3n+4 匹配位置为 4、7、10、13...的元素
    6):nth-last-child(an + b): 与nth-child(an + b)的功能类似,只是该方法倒序计数
    7):first-child表示一组兄弟节点中的第一个
<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 父元素的最后一个子元素
9):only-child父元素的唯一子元素(可一直追溯到子元素的子元素)-->等价于: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 在所有的子元素中,只选中唯一类型的元素,而不管该元素有多少个兄弟节点。

<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)关于a链接 :link :visited :hover :active这四个属性的定义顺序为:Love Hate

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

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

定义顺序不对,可能会导致:active伪类失效

12):focus当用户点击或触摸元素或通过键盘的 “tab” 键选择它时会被触发

伪元素扩展:

::before: {
}
::after {
}
// selection支持的元素:color  、background-color 、cursor 、caret-color(插入光标的颜色)、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 {
}
// 首个字符(中文或者应为)
::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值来确定输入值是小写还是大写,但个人感觉不是很妥,还得需要记住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天

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,103评论 2 19
  • 一、理论基础知识部分 1.1、讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起T...
    我家媳妇蠢蠢哒阅读 3,110评论 2 106
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,569评论 0 7
  • 本章转载自新浪博客网友:blog.sina.com.cn/s/blog_7f5571aa0102w2tv.html...
    czboy阅读 1,449评论 0 11
  • 第一部分HTML&CSS整理答案1.什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HTML5...
    Programmer客栈阅读 1,994评论 0 12