一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,如果你有更好的点子,欢迎加入前端开发微信群,这里有很多活跃的大神每天都在分享,群主也会每天分享最优秀的文章给大家。面试题从这里开始~
1.请描述第2行代码的执行顺序
var obj = {a:1}obj.b = obj = {a:2}
// 假设:上面第2行代码从右到左赋值var obj = {a:1}// 创建cobj指向objvar cobj = objobj.b = obj = {a:2}console.log(obj.b) // undefinedconsole.log(cobj.b) // {a: 2}
obj.b的值是undefined,cobj的属性b并未赋值过,但是cobj.b的值是{a: 2}。cobj指向obj({a: 1}),只有obj.b = {a: 2},这一步执行了obj.b才有值!故第2行代码执行顺序是从右到左赋值。可分解为:
// obj指向新对象{a: 2}obj = {a: 2}// obj({a: 1})的b属性指向新对象{a: 2}obj.b = {a: 2}
obj.b = obj = {a: 2} | | {a: 1} {a: 2}
2.有 1 到 10000 共 10000 个数,如果我从中随机拿走一个数,你如何知道我拿走了哪个?
方式一:相加1 ~ 10000个数相加然后减去随机拿走后的1 ~ 9999个数即可得出拿走的那个数。方式二:相乘1 ~ 10000个数相乘除以随机拿走后的1 ~ 9999个数即可得出拿走的那个数。方式三:位运算符
(1^2^3^...^10000)^(n1^n2^...nm) | | 10000个数 9999个数
3.请写出隐藏一个html元素的各种方式?
<!-- 1.表单元素type=hidden未脱离文档流,无法触发绑定事件--><input type='hidden' /><!-- 2.display:none; 或者 html的hidden属性脱离文档流,无法触发绑定事件--><div style='display:none;'></div><div hidden></div><!-- 3.visibility: hidden;未脱离文档流,无法触发绑定事件 --><div style='visibility:hidden;'></div><!-- 4.透明度opacity:0;未脱离文档流,可以触发绑定事件--><div style='opacity:0;'></div><!-- 5.绝对定位position:absolute;未脱离文档流,可以触发绑定事件--><div style='position:absolute;left:-9999px'></div>
4.请写出一个获取数组最大值的函数?
var arr = [22,18,2,10,9,3]arr.reduce((prev, next) => { return Math.max(prev, next)})Math.max.apply(null, arr)Math.max(...arr)Reflect.apply(Math.max, Math, arr)
5.你知道链接target属性值的区别吗?请写出。
- _self(默认):加载响应到当前页面
- _blank:加载响应到新窗口
- _parent:加载响应到父上下文
- _top:加载响应到顶层浏览器上下文
- name:加载响应到指定名称的框架上下文其中name的是frame标签或者iframe标签的name属性。html5已经不支持frame标签和frameset标签,若需使用框架建议使用iframe标签。
6.CSS有几种引入方式?link和@import有什么区别?
引入方式
- 行内样式
// index.html<div style='width:100px;height:100px;border:1px solid;'></div>
- 嵌入样式
// index.html<style>*{ margin:0; padding:0;}</style>
- 链接样式
// index.html<link rel="stylesheet" type="text/css" href="reset.css" />
- 导入样式
// index.css@import url(common.css);
// index.html<style>@import url(index.css);</style>
link和@import的区别
- link是html引入css方式,@import是css引入方式
- 浏览器会先加载页面时同步加载link引入的css文件;页面加载完成后,再加载@import引入的css
- 浏览器对link的兼容性更高
- 优先级:link > @import
7.请写出一个秒转时分秒的函数。hh:mm:ss格式。
function getTime (num) { const hours = Math.floor(num / 3600) const minutes = Math.floor(num % 60 / 60) const seconds = Math.floor(num % 60) return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`}function getTime(seconds) { return [seconds / 3600, seconds % 60 / 60, seconds % 60].map(v => { return `${Math.floor(v).toString().padStart(2, '0')}` }).join(':')}
8.已知年月,求该月共多少天?
function getDays (year, month) { return new Date(year, month + 1, 0).getDate()}