Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么console.log的行为与.innerText/.innerHTML属性不同_Javascript - Fatal编程技术网

Javascript 为什么console.log的行为与.innerText/.innerHTML属性不同

Javascript 为什么console.log的行为与.innerText/.innerHTML属性不同,javascript,Javascript,我想用下面的代码给另一个人写一个答案,但是console.log的行为不同于.innerText/.innerHTML属性。为什么?如何将控制台的输出记录到屏幕上而不是控制台上 HTML 编辑:我使用.innerHTML 您需要使用mouseevent中所需的属性 您的控制台日志正在记录event.target,即单击的按钮的名称 您的控制台具有所有事件属性,包括screenX、screenY等。如果您需要这些属性,请将event.target更改为event.screenX 这些事件的可用属性

我想用下面的代码给另一个人写一个答案,但是
console.log
的行为不同于
.innerText
/
.innerHTML
属性。为什么?如何将
控制台的输出记录到屏幕上而不是控制台上

HTML

编辑:
我使用
.innerHTML


您需要使用mouseevent中所需的属性

您的控制台日志正在记录event.target,即单击的按钮的名称

您的控制台具有所有事件属性,包括screenX、screenY等。如果您需要这些属性,请将event.target更改为event.screenX

这些事件的可用属性列表位于:


您还可以研究innerText、innerHTML和textContent分配给
之间的差异。innerText
将始终将分配的值转换为字符串。当您执行
console.log时,不会发生这种情况

控制台
API根据值的类型呈现值。值得注意的是,对象是以某种交互(折叠/展开)方式表示的,使用特定的字体样式(颜色、斜体等)向用户提供更多提示。此外,
console
显示不一定是自己的属性或可枚举的属性。要自己再现这一点,需要相当多的编码

使用一个函数可以创建属性(包括继承属性)的JSON表示形式,这些属性是基本值且不为null,并且属性名称不都是大写(通常表示常量),这将有很大的帮助

此外,在保留换行符的DOM元素中显示(空白是预先设置的):

函数对象字符串(obj){
让结果={}
用于(让道具插入obj){
if(对象的类型[prop]!==“函数”&对象的类型[prop]!==“对象”&&prop.toUpperCase()!==prop){
结果[prop]=obj[prop];
}
}
返回obj.constructor.name+“:\n”
+stringify(result,null,2)+“\n”;
}
const ll=document.querySelector(`click`);
const tt=document.createElement(`div`);
const t=document.createElement(`pre`);
ll.addEventListener(`click`,函数(事件){
t、 innerText=objectString(事件)+
objectString(event.target)+
objectString(event.currentTarget);
tt.appendChild(t);
文件.正文.附件(tt);
});

单击me
分配给
innerText
将始终将分配的值转换为字符串。当您执行
console.log
t.innerText+=event.target
event.target
对象转换为字符串,并将
[object object]
转换为字符串时,不会发生这种情况。请尝试
innerHtml
@justin,因为没有任何变化。感谢您的回答,但是如果您可以从控制台输出中看到,我想显示
target
currentTarget
之间的差异。我想在DOM而不是控制台上获得结果。DOM上的
objectString
打印和显示的属性和值并没有告诉我们这一点。我不明白您想要什么不同。对于
target
currentTarget
,我的答案中产生的输出明显不同。例如,当您单击“我”时,
nodeName
属性具有不同的值(“按钮”与“强”)。是的,这个输出在DOM中。所以我不明白为什么要写“我想在DOM上而不是控制台上获得结果”,因为这正是我的答案。为了进一步突出区别,可以在返回值前面加上
obj.constructor.name+”:\n“+
。我已经更新了我的答案。
<button type="button" id="click">Click <strong>me</strong></button>
const ll = document.querySelector(`#click`);
const tt = document.createElement(`div`);
const t = document.createElement(`p`);
ll.addEventListener(`click`, function (event) {
  t.innerText += event;
  t.innerText += event.target;
  t.innerText += event.currentTarget;
  tt.appendChild(t);
  document.body.appendChild(tt);
  console.log(event);
  console.log(event.target);
  console.log(event.currentTarget);
});