前端开发博客微信群第三周面试题汇总

一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,如果你有更好的点子,欢迎加入前端开发微信群,这里有很多活跃的大神每天都在分享,群主也会每天分享最优秀的文章给大家。

面试题从这里开始~

1.请描述第2行代码的执行顺序

var obj = {a:1}
obj.b = obj = {a:2}
// 假设:上面第2行代码从右到左赋值
var obj = {a:1}
// 创建cobj指向obj
var cobj = obj
obj.b = obj = {a:2}
console.log(obj.b) // undefined
console.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()
}

以上就是这周的面试汇总,记得给我们点好看,转发支持我们更好的走下去。每道题目的答案并非标准答案,我们期待在评论区看到你的答案。想接收每日最新面试题和最新文章推荐的可以进入加我们微信群哦。


关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流