登录  /  注册
首页 > web前端 > js教程 > 正文

你可能不知道的Chrome Debug专用的函数!

青灯夜游
发布: 2021-02-08 10:29:48
转载
2520人浏览过

你可能不知道的Chrome Debug专用的函数!

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

Console Utility Functions

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

$_

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

1.png

在遇到不能链式调用的函数时可以用 $_ 来避免游标被修改:

2.png

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

let a;
a = 1
  |> ((n) => add(n, 5))
  |> double;

console.log(a); // 12
登录后复制

$, $$

$(selector[, element]), $$(selector[, element])

$$$ 分别就是 document.querySelectordocument.querySelectorAll 的缩写,其来源于大家都熟知的 JQuery。

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

$('.btn', $0)
登录后复制

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

3.png

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

debug

debug(function)

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

function a() {
  console.log(1);
}

debug(a);
// undebug(a);
登录后复制

其效果相当于:

function a() {
  console.log(1);
}
a = (function() {
  const origin = a;
  return function() {
    debugger;
    origin();
  }
})();
登录后复制

monitor

monitor(function)

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

monitorEvents

monitorEvents(element[, eventType])

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

4.png

效果和以下 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])来停止监听。

9.gif

getEventListeners

getEventListeners(element)

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

10.gif

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

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

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

const options: {
  capture: true,
  passive: true,
  once: false
}
window.addEventListener('click', console.log, options);
// window.removeEventListener('click', console.log, options);
登录后复制

queryObjects

queryObjects(object)

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

6.png

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

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

copy

copy(object)

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

7.png

还很贴心的加上了缩进

keys, values

keys(object), values(object)

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

const object = Object.create({ foo: 1});
object.bar = 2;
for (let key in object) {
  console.log(key)
}
// bar
// foo
登录后复制
除了自身的 key,还要 enumerable or not.)。

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

for (let key in object) {
  if (Object.prototype.hasOwnProperty.call(object, key)) {
    console.log(key);
  }
}
// bar
登录后复制

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

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()

1.png

2.png

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

更多编程相关知识,请访问:编程视频!!

以上就是你可能不知道的Chrome Debug专用的函数!的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号