文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 15:51

关注

Console Utility Functions

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

$_

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

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

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

 

  1. let a; 
  2. a = 1 
  3.   |> ((n) => add(n, 5)) 
  4.   |> double
  5.  
  6. console.log(a); // 12 

$, $$

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

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

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

  1. $('.btn', $0) 

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

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

debug

  1. debug(function

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

 

  1. function a() { 
  2.   console.log(1); 
  3.  
  4. debug(a); 
  5. // undebug(a); 

其效果相当于:

 

  1. function a() { 
  2.   console.log(1); 
  3. a = (function() { 
  4.   const origin = a; 
  5.   return function() { 
  6.     debugger; 
  7.     origin(); 
  8.   } 
  9. })(); 

monitor

  1. monitor(function

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

monitorEvents

  1. monitorEvents(element[, eventType]) 

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

 

效果和以下 JavaScript 相同:

 

  1. window.addEventListener('click', console.log) 
  2. window.addEventListener('touchstart', console.log) 
  3. window.addEventListener('touchmove', console.log) 
  4. window.addEventListener('touchend', console.log) 
  5. window.addEventListener('touchcancel', console.log) 

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

getEventListeners

  1. getEventListeners(element) 

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

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

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

 

  1. const options: { 
  2.   capture: true
  3.   passive: true
  4.   once: false 
  5. window.addEventListener('click', console.log, options); 
  6. // window.removeEventListener('click', console.log, options); 

queryObjects

  1. queryObjects(object) 

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

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

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

copy

  1. copy(object) 

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

还很贴心的加上了缩进

keys, values

  1. keys(object), values(object) 

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

 

  1. const object = Object.create({ foo: 1}); 
  2. object.bar = 2; 
  3. for (let key in object) { 
  4.   console.log(key
  5. // bar 
  6. // foo 

除了自身的 key,还要 enumerable or not.)。

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

 

  1. for (let key in object) { 
  2.   if (Object.prototype.hasOwnProperty.call(object, key)) { 
  3.     console.log(key); 
  4.   } 
  5. // bar 

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

 

  1. const object1 = { 
  2.   hasOwnProperty: function() { 
  3.     return false
  4.   }, 
  5. }; 
  6. const object2 = Object.create(null); 
  7.  
  8. object1.key = 'key'
  9. object2.key = 'key'
  10.  
  11. object1.hasOwnProperty('key'); // ? 
  12. object2.hasOwnProperty('key'); // ? 

clear

  1. clear() 

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

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

来源:segmentfault.com内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯