前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你知道 Chrome 专门为调试提供的这些函数吗?

你知道 Chrome 专门为调试提供的这些函数吗?

作者头像
疯狂的技术宅
发布2020-11-26 16:09:31
1.5K0
发布2020-11-26 16:09:31
举报
文章被收录于专栏:京程一灯
代码语言:javascript
复制
// 每日前端夜话 第439篇
// 正文共:1600 字
// 预计阅读时间:8 分钟

在 Chrome 的 DevTools 中的控制台提供了一些 Debug 专用的函数,每一个都身怀绝技。

配合 demo 代码学习效果更佳,代码获取方式请看文末~

Console Utility Functions

这些函数只能用在 Chrome 的 console 中。当我在第一次看到这些函数时非常兴奋,把它们直接写到了自己的代码中,结果当然是跳出了各种 Uncaught ReferenceError:xxx is not defined 错误。

$_

_ 会存储的执行结果,在控制台测试 JavaScript 的时候通常都需要逐步确认,这正是 _ 的用武之地:

用到很多不能 Chain 的 Function 時能利用 _ 來避免游標來回修改:用到很多不能Chain的功能时能利用 _来避免游标来回修改:

顺带提一句,将来也有可能会出现 Pipeline operator 来做到任意的函数链接,一次来促进提升性或避免修改内建原型。

代码语言:javascript
复制
let a;
a = 1
  |> ((n) => add(n, 5))
  |> double;

console.log(a); // 12

$, $$

(selector[, element]),

第二个参数可以传入起始的元素,搭配 $0 就可以先检验一个元素,然后再从它开始搜寻。

代码语言:javascript
复制
$('.btn', $0)

我经常用 $$ 来快速的测试一些东西,例如输出某个人 GitHub 页面的所有存储库名称:

❝不过如果已经把 JQuery 引入为 $ 的话,还是会正常执行 JQuery 的。 ❞

debug

debug(function)

参数为一个函数,只要执行到该函数就会触发调试器,可以用 undebug(fn) 来取消:

代码语言:javascript
复制
function a() {
  console.log(1);
}

debug(a);
// undebug(a);

其效果相当于:

代码语言:javascript
复制
function a() {
  console.log(1);
}
a = (function() {
  const origin = a;
  return function() {
    debugger;
    origin();
  }
})();

monitor

monitor(function)

用法和 debug 很像,monitor 的 Function 被行時印出 Function 名和, 用法和 debug 类似,monitor 函数被执行时会输出函数名称和参数,可用 unmonitor(function) 来停止,不过不能用于箭头函数,如果要监听箭头函数的执行就只能手动重写了。

monitorEvents

monitorEvents(element[, eventType])

可以监听并输出元素的特定事件,比较特别的是除了能监听单个事件,还能监听事件类型,例如输出 window 的点击事件和所有 touch 类别的事件:

效果和以下 JavaScript 相同:

代码语言:javascript
复制
window.addEventListener('click', console.log)
window.addEventListener('touchstart', console.log)
window.addEventListener('touchmove', console.log)
window.addEventListener('touchend', console.log)
window.addEventListener('touchcancel', console.log)

可以用 unmonitorEvents(element [, eventType])来停止监听。

getEventListeners

getEventListeners(element)

输出已注册在元素上的监听器,就拿刚才的例子来说,输入 monitorEvents(element) 后再输入 getEventListeners(element) 就会看到所有事件都被注册了一波:

展开的话可以看到监听器的各种属性:

  • listener:触发事件执行的函数
  • once:该监听器只会触发一次
  • passive:无法执行event.preventDefault(),通常用于提升监听器的性能,如 scroll
  • type:监听事件类型
  • useCapture:监听器会在 Capture 阶段拦截事件

以上属性都是在执行 addEventListener 时所能够提供的参数,别忘了在 removeEventListener 时也要填入相同的参数才能除监听器。

代码语言:javascript
复制
const options: {
  capture: true,
  passive: true,
  once: false
}
window.addEventListener('click', console.log, options);
// window.removeEventListener('click', console.log, options);

queryObjects

queryObjects(object)

官方说明是返回 Constructor 产生的所有实例,不过我的理解是:返回所有原型链中包含该原型的对象。

可以看到以 a 为原型创建的 b也会出现在 queryObjects(A) 的结果中。

另外由于 queryObjects 并不会直接返回数组,所以要点右键菜单中的 Store as global variable 把数组放进变量 temp1

copy

copy(object)

copy 能夠把 DOM、物到剪,例如者有時候會用 copy 把件 JSON,到框來 API Spec,或是用 Console 來快速建立、修改資料。

copy 能够把 DOM、对象复制到剪贴板,我有时会用 copy 对象转为 JSON 并粘贴到接口文档中,或者在控制台中快速的创建或修改假数据。

❝还很贴心的加上了缩进 ❞

注意:在demo中运行这段代码的前提是要把代码包放到web服务器中,否则会报错

keys, values

keys(object), values(object)

输出对象本身的所有 key 或 value,效果与 Object.keys(object)Object.values(object)相同,为什么要强调自身呢?如果是用 in 来遍历对象的每个属性,就会把原型链上所有的属性全都拿出来出来跑一遍:

代码语言:javascript
复制
const object = Object.create({ foo: 1});
object.bar = 2;
for (let key in object) {
  console.log(key)
}
// bar
// foo

❝除了自身存在 key,还要 enumerable 才行。 ❞

如果想要确认属性是否是定义在对象本身可以用 Object.prototype.hasOwnProperty

代码语言:javascript
复制
for (let key in object) {
  if (Object.prototype.hasOwnProperty.call(object, key)) {
    console.log(key);
  }
}
// bar

至于为什么不用 object.hasWonProperty(key),请参考下面的代码:

代码语言:javascript
复制
const object1 = {
  hasOwnProperty: function() {
    return false;
  },
};
const object2 = Object.create(null);

object1.key = 'key';
object2.key = 'key';

object1.hasOwnProperty('key'); // ?
object2.hasOwnProperty('key'); // ?

clear

clear()

虽然点击左上角的 ? 就可以把 Console 清理干净,但我还是习惯用 clear(),就像在终端中输入clear 那样。

注意在 Preserve log 开启的情况下不能用 clear 清空 Console。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Console Utility Functions
    • $_
      • $, $$
        • debug
          • monitor
            • monitorEvents
              • getEventListeners
                • queryObjects
                  • copy
                    • keys, values
                      • clear
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档