为何Chrome控制台中clear()可直接调用,log()却不行?
为什么Chrome控制台中
clear()可直接调用,log()却不行? 核心原因分两点:
clear是控制台命令行API + 不可枚举的window属性
Chrome开发者控制台(DevTools)自带一套专属的命令行API,clear()就是其中之一,用于快速清空控制台。同时,Chrome为了兼容使用习惯,把console.clear映射成了window.clear,但这个window.clear是不可枚举属性——普通的console.log(window)或console.log(this)只会展示对象的可枚举属性,所以你看不到它。你可以用Object.getOwnPropertyDescriptor(window, 'clear')查看这个属性,会发现它的enumerable值为false。log并非控制台命令行API,仅属于console对象log()本身并不是控制台的内置命令,它是标准Web API中console对象的方法,只能通过console.log()来调用。控制台没有把log加入命令行API,也没有挂载到window对象上,所以直接输入log()会提示未定义。
简单验证:
- 输入
Object.getOwnPropertyDescriptor(window, 'clear'),会返回包含enumerable: false的属性描述对象,这就是它在window打印中隐身的原因。 - 输入
typeof clear返回function,输入typeof log返回undefined,能直观体现两者的区别。
内容的提问来源于stack exchange,提问作者RTYX
相关产品推荐
相关产品推荐

