记录一下今天的面试
首先是笔试,一共十三道题,时间半小时。
第一题字符串去重,直接使用ES6的Set很简单,
var str = 'dkhawdlakw4dwadkn' console.log([...new Set([...str])].join(''));
第二题考CSS的多种垂直居中,我就写了两种我常用的,一个是父元素display设为flex,子元素margin为auto
1 2 3 4 5 6 7 8 9 10 11 12 | .parent { display: flex; width: 100px; height: 100px; background-color: red; } .child { margin: auto; width: 50px; height: 50px; background-color: aqua; } |
第二种用position + tansfrom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .parent { position: relative; width: 100px; height: 100px; background-color: red; } .child { position: absolute; left: 50%;top: 50%; transform: translate(-50%, -50%); width: 50px; height: 50px; background-color: aqua; } |
行内元素主流就行高等于父级元素高+text-align:center;
第三题
第四题
第五题考闭包
function foo () { var i = 0 return function() { console.log(i++); } } const a = foo() const b = foo() a(), b(), a()
第六题
第七题是一道考Date的题,将一个时间戳转换为'2001-01-01 01:01'类型的字符串
当时我写的都笨方法,分别获取年月日分时的数值,补零处理相加
其实Date.prototype上自带了一个方法,可以获取
const date = new Date(1644399044354).toLocaleString('chinese', {hour12: false}).slice(0, 14)
默认获取12小时制的年月日时分秒,使用字符串截取就可以了。
第八题考的是this指向
var a = '1' function foo () { console.log(this.a); } const b = {a : '2', foo} const c = {a: '3', foo} const d = {a: '4', foo} b.foo() c.foo() b.foo.call(d)
考的无非是谁调用函数,this就指向谁,还有call,apply,bind的了解
其实类似的题有很多
var name = 'window' var person1 = { name: 'person1', foo1: function () { console.log(this.name); }, foo2: () => console.log(this.name), foo3: function () { return function () { console.log(this.name); } }, foo4: function () { return () => { console.log(this.name); } } } var person2 = {name: 'person2'} person1.foo1()//person1 person1.foo1.call(person2)//person2 person1.foo2()//window person1.foo2.call(person2)//window person1.foo3()()//window person1.foo3.call(person2)()//window person1.foo3().call(person2)//person2 person1.foo4()()//person1 person1.foo4.call(person2)()//person2 person1.foo4().call(person2)//person1
var name = 'window' function Person(name) { this.name = name this.foo1 = function () { console.log(this.name); } this.foo2 = () => console.log(this.name); this.foo3 = function () { return function () { console.log(this.name); } } this.foo4 = function () { return () => { console.log(this.name); } } } let person1 = new Person('person1') let person2 = new Person('person2') person1.foo1()//person1 person1.foo1.call(person2)//person2 person1.foo2()//person1 person1.foo2.call(person2)//person1 person1.foo3()()//window person1.foo3.call(person2)()//window person1.foo3().call(person2)//person2 person1.foo4()()//person1 person1.foo4.call(person2)()//person2 person1.foo4().call(person2)//person1
这些都是换汤不换药的题。
第九题考正则,写出电话的正则表达式
对于正则我之前都是边查编写,我就简单写了个/[0-9]{11}/
正确的是手机号码^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
第十题考的是构造函数存在返回值
看到这道题的时候我有点😵,其实之前在学JS高级的时候遇到过,不过缺忘了,我就随便猜一个答案上去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】