我正在努力接管一个代码库,测试以确保console.warn存在如下:
if (window.console) {
console.warn("shhaabang");
}
但是,我的问题是它只能在你有窗口对象的浏览器中工作.这似乎也有效.
if (console && typeof console.warn == 'function') {
console.warn("shhaabang");
}
这种方法有什么缺点吗?有没有更好的方法不承担窗口的存在?我应该先看看窗口或全局是否存在并检查两者?
澄清至少我应该明白,我在没有窗口对象的东西中测试它.但是,要明确我在node.js以及浏览器中运行它
最佳答案 考虑使用已经交付了这个而不是重新发明轮子的javascript日志框架.例如,尝试
loglevel.
以下是loglevel处理安全日志记录的方法(view full source):
function realMethod(methodName) {
if (typeof console === undefinedType) {
return false; // We can't build a real method without a console to log to
} else if (console[methodName] !== undefined) {
return bindMethod(console, methodName);
} else if (console.log !== undefined) {
return bindMethod(console, 'log');
} else {
return noop;
}
}
function bindMethod(obj, methodName) {
var method = obj[methodName];
if (typeof method.bind === 'function') {
return method.bind(obj);
} else {
try {
return Function.prototype.bind.call(method, obj);
} catch (e) {
// Missing bind shim or IE8 + Modernizr, fallback to wrapping
return function() {
return Function.prototype.apply.apply(method, [obj, arguments]);
};
}
}
}