面试题答案
一键面试- 事件绑定
- 兼容性问题场景:在IE8及以下浏览器中,使用
addEventListener
方法会报错,IE8及以下使用attachEvent
来绑定事件。例如在现代浏览器中这样绑定事件:
而在IE8及以下会报错,IE8及以下代码如下:const element = document.getElementById('myElement'); element.addEventListener('click', function () { console.log('Clicked'); });
const element = document.getElementById('myElement'); element.attachEvent('onclick', function () { console.log('Clicked'); });
- 处理方法:可以封装一个兼容性的事件绑定函数,例如:
function addEvent(element, eventType, handler) { if (element.addEventListener) { element.addEventListener(eventType, handler); } else if (element.attachEvent) { element.attachEvent('on' + eventType, handler); } } const element = document.getElementById('myElement'); addEvent(element, 'click', function () { console.log('Clicked'); });
- 兼容性问题场景:在IE8及以下浏览器中,使用
- 获取事件对象
- 兼容性问题场景:在现代浏览器中,事件对象会作为参数传递给事件处理函数,例如:
但在IE8及以下,事件对象是作为document.addEventListener('click', function (event) { console.log(event.target); });
window.event
存在的,例如:document.attachEvent('onclick', function () { const event = window.event; console.log(event.srcElement); });
- 处理方法:可以在事件处理函数中统一获取事件对象,例如:
document.addEventListener('click', function (event) { event = event || window.event; const target = event.target || event.srcElement; console.log(target); });
console.log
打印- 兼容性问题场景:在一些较老的浏览器(如IE8及以下)中,
console
对象可能不存在,如果直接使用console.log
会报错。例如:
console.log('This will error in old browsers');
- 处理方法:可以在代码开头添加对
console
对象的检测和定义,例如:
if (!window.console) { window.console = { log: function () {} }; } console.log('Safe to use now');
- 兼容性问题场景:在一些较老的浏览器(如IE8及以下)中,
JSON
解析与序列化- 兼容性问题场景:IE7及以下浏览器不支持
JSON.parse
和JSON.stringify
方法。例如在现代浏览器中:
在IE7及以下会报错。const jsonStr = '{"name":"John"}'; const obj = JSON.parse(jsonStr); const newStr = JSON.stringify(obj);
- 处理方法:可以引入一个
json2.js
的垫片库来解决兼容性问题,也可以手动实现JSON.parse
和JSON.stringify
方法。例如手动实现JSON.parse
(简化示例):
if (!window.JSON) { window.JSON = { parse: function (jsonStr) { return (new Function('return'+ jsonStr))(); } }; } const jsonStr = '{"name":"John"}'; const obj = JSON.parse(jsonStr);
- 兼容性问题场景:IE7及以下浏览器不支持
Object.keys
方法- 兼容性问题场景:IE8及以下浏览器不支持
Object.keys
方法,该方法用于获取对象自身可枚举属性的键组成的数组。例如在现代浏览器中:
在IE8及以下会报错。const obj = {a: 1, b: 2}; const keys = Object.keys(obj);
- 处理方法:可以手动实现
Object.keys
方法,例如:
if (!Object.keys) { Object.keys = function (obj) { const keys = []; for (const key in obj) { if (obj.hasOwnProperty(key)) { keys.push(key); } } return keys; }; } const obj = {a: 1, b: 2}; const keys = Object.keys(obj);
- 兼容性问题场景:IE8及以下浏览器不支持