一周的面试题有点多,希望你能够转发收藏起来,方便自己后面有时间可以更好的回顾备忘,也当做是对我们的一点支持,如果你有更好的点子,欢迎加入前端开发微信群,这里有很多活跃的大神每天都在分享,群主也会每天分享最优秀的文章给大家。
面试题从这里开始~
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()
}
以上就是这周的面试汇总,记得给我们点好看,转发支持我们更好的走下去。每道题目的答案并非标准答案,我们期待在评论区看到你的答案。想接收每日最新面试题和最新文章推荐的可以进入加我们微信群哦。