文章转载自公众号【前端FE】,作者 前端FE
本系列文章针对目前常见的面试题,仅提供了相应的核心原理及思路,部分边界细节未处理。后续会持续更新,希望对你有所帮助。
思考
这是今天的题目,你可以先思考一下,然后重点关注不熟悉的~
rem基本设置
实现一个双向数据绑定
var、let 和 const 区别的实现原理是什么?
谈谈你对TCP三次握手和四次挥手的理解.
如何让 (a == 1 && a == 2 && a == 3) 的值为true?
逐个击破
6.rem基本设置
在手机端项目中,经常用到是rem单位,笔试的时候你能写出来吗?
// 基准大小
const baseSize = 32;
function setRem () {
const scale = document.documentElement.clientWidth / 750;
document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px';
}
setRem();
// 监听窗口变化
window.onresize = function () {
setRem()
};
7.实现一个双向数据绑定
Vue的双向数据绑定的原理相信大家也都十分了解了,主要是通过Object对象的defineProperty属性,重写data的set和get函数来实现的
,主要还是来实现一个实例。
let obj = {}
let input = document.getElementById('input')
let span = document.getElementById('span')
// 数据劫持和
Object.defineProperty(obj, 'text', {
configurable: true,
enumerable: true,
get() {
console.log('获取数据了')
return obj['text']
},
set(newVal) {
console.log('数据更新了')
input.value = newVal
span.innerHTML = newVal
}
})
// 输入监听
input.addEventListener('keyup', function(e) {
obj.text = e.target.value
})
8.var、let 和 const 区别的实现原理是什么?
var
let
const
9.谈谈你对TCP三次握手和四次挥手的理解
TCP三次握手:
客户端发送syn包到服务器,等待服务器确认接收。
服务器确认接收syn包并确认客户的syn,并发送回来一个syn+ack的包给客户端。
客户端确认接收服务器的syn+ack包,并向服务器发送确认包ack,二者相互建立联系后,完成tcp三次握手。
四次挥手就是中间多了一层 等待服务器再一次响应回复相关数据的过程。
10.如何让 (a == 1 && a == 2 && a == 3) 的值为true?
const a = {
num: 0,
valueOf: function() {
return this.num += 1
}
};
console.log(a==1 && a==2 && a==3); // true
使用相等操作符,js会做强制类型转化
我们的对象每次调用valueOf()它的值会增加1
(a==1 && a==2 && a==3) 当他们比较时,JavaScript会企图将对象转化成数字的类型,进行比较。
当要转化的是一个Object的时候,JavaScript会调用本身的valueOf()方法,这个时候就可以实现this.num += 1
恭喜你,又掌握了一个新技能~
精彩文章
END