鬼扯的面试题

手写call

Function.prototype.myCall = function(target, ...args) {
	target = (target === null || target === undefined) ? globalThis:Object(target);
	let key = Symbol('this'); // 保证属性的唯一
	// 属性不可被枚举
	Object.defineProperty(target, key, {
		enumerable: false,
		value: this;
	});
	let result = target[key](...args);
	delete target[key];
	return result;
}
function sum(a,b) {
	return a+b;
}
sum.myCall(null, 1, 1);
sum.myCall(undefined, 1, 3);
sum.myCall({}, 1,4);
sum.myCall(1, 1, 5);

手写bind

Function.prototype.myBind = function(target, ...orginArgs) {
	let fn = this;
	return function(..args) {
		fn.call(target, ...orginArgs, ...args);
	}
}

添加什么代码使let [a,b] = {a: 1, b:2};成立不报错

迭代器的考察

Object.prototype[Symbol.iterator] = function() {
	return Object.values(this)[Symbol.iterator]();
}
let [a, b] = {a: 1, b: 2};

判断中等于的考察

let a = {
	n: 1,
	valueOf: function() {
		return this.n++;
	}
};
console.log(a===1 && a === 2 && a ===3); // 输出true

判断时

  • 类型相同,值比较
  • 类型不同
    • 均为原始值,转为数字比较
    • 一端原始值、一端对象 ,对象先调用valueOf,无法转为原始值,再调用toString

其他

获取元素大小

  • clientHeight、clientwidth 元素大小,不包含滚动条、边框
  • offsetWidth, offsetHeight 包含边框、滚动条
  • scrollHeight, scrollWidth 包含滚动位置
  • getBoundingClientRect() 获取包含元素的最小尺寸,包括放大缩小、旋转

知识盲区

  • 浏览器在标签在非活动状态(切换到别的网页标签、缩小浏览器到任务栏),setInterval中时间如果小于1000则都会被按照1000执行,减少性能消耗
  • onWheel,preventDefault 会报错 Unable to preventDefault inside passive event listener
ele.addEventListener('wheel', (e) => {
    e.preventDefault();
}, {passive: true});

css相关

// 兄弟选择器
.item ~.b {}
// <input required /> 当input符合规则时的样式
input:valid {}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值