为何在浏览器控制台输入['Search: '-print``-'']会打开打印预览?
控制台特殊代码触发打印预览的原因及相关问题解析
一、触发打印预览的核心原因
这段代码能触发打印预览,本质是JavaScript标签模板语法和浏览器全局print方法的结合:
- JavaScript的标签模板允许直接在函数名后紧跟模板字符串(无需括号)来调用函数,比如
func``template等价于func(['template'],)。 print是浏览器全局对象(window)的内置方法,作用就是触发打印预览——不管传入什么参数,只要调用它就会弹出打印窗口。
拆解你输入的代码:print``- 这部分是标签模板调用,直接执行了print函数,这才是触发打印的关键。剩下的'Search: '、-、''等字符串拼接逻辑,根本不影响这个核心行为,因为print已经被调用了。
二、类似的触发情况
浏览器控制台里,任何全局内置方法都可以通过标签模板或常规调用触发对应行为,常见的例子有:
alert``hello:弹出警告框显示helloconfirm``are you sure?:弹出确认对话框prompt``enter your name::弹出输入对话框open``https://example.com:尝试打开新窗口访问指定地址(部分浏览器会拦截)- 当然直接输入
print()、alert()这种常规调用,也会触发对应行为,只是写法没那么“奇怪”。
三、转义避免触发的方法
要避免触发,核心是不让print被解析成函数调用,有几种简单方法:
- 将
print作为字符串内容处理,用反引号包裹:['Search: '-`print```-''] - 在
print和模板字符串之间加空格,破坏标签模板结构:['Search: '-print ``-''] - 改用明确的字符串拼接写法,消除语法歧义:
['Search: ' + 'print' + '-']
内容的提问来源于stack exchange,提问作者Emanuele Mancari
相关产品推荐
相关产品推荐

