面试遇到的问题
1、js里面的继承函数
a、原型链继承
通过将子构造函数的原型对象指向父构造函数的实例,实现了继承
b、构造函数继承
通过在子构造函数中调用父构造函数来实现继承
c、组合继承
结合了原型链继承和构造函数继承,既继承了父构造函数的属性,又继承了父构造函数原型对象上的方法
d、原型式继承
原型式继承是通过使用一个临时构造函数和**Object.create()**方法来实现继承。本质是创建一个新对象,将其原型对象指向另一个已有的对象。这种方式可以实现属性和方法的继承,但是不能传递构造函数的参数。
e、Object.create()
Object.create() 是把现有对象的属性,挂到新建对象的原型上,新建对象为空对象.
f、寄生式继承
j、寄生组合式继承
h、ES6类继承
在ES6中引入了类的概念,通过class关键字和extends关键字可以实现类的继承。
2、匿名函数
匿名函数主要有两种常用的场景,一是回调函数,二是直接执行函数。
(function(){console.log('自执行的匿名函数');
})();(functon(){console.log("自执行函数");
}());
var double = function(x){return 2 * x;
}
3、前端安全性问题
a、跨站脚本攻击(XSS): 通过在网页中注入恶意脚本,窃取用户的敏感信息或操纵网页内容。解决办法:
aa) 不直接显示用户输入,使用DOMText 文本的显示用户输入,可有效过滤恶意程序;
bb) 对输入的特殊字符 转译为html的实体,可以简单的防止XSS攻击
function escapeHTML(str) {var map = {'&': '&','<': '<','>': '>','"': '"',"'": '''};return str.replace(/[&<>"']/g, function(m) { return map[m]; });
}// 使用方法
var safeString = escapeHTML('<script>alert("XSS")</script>');
console.log(safeString); // 输出:<script>alert("XSS")</script>
cc) js-xss 库:在不改变原有HTML结构的情况下,安全地对用户输入进行清洗和转义,以防止潜在的XSS攻击;
dd) 使用HTTP-only和Secure属性:设置Cookie的HTTP-only属性,防止JavaScript访问Cookie;使用Secure属性,确保Cookie只在HTTPS连接中传输
b、跨站请求伪造(CSRF): 攻击利用用户的登录状态,冒充用户发起请求,执行未授权的操作。
c、点击劫持:通过透明层覆盖合法网站,诱导用户点击,执行恶意操作。
d、本地存储数据泄露:敏感信息存储在前端,面临泄露风险。