Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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行为_Javascript - Fatal编程技术网

Javascript 奇怪的console.log行为

Javascript 奇怪的console.log行为,javascript,Javascript,在next.js中,getInitialProps可以在服务器或客户端上运行。客户端上的ctx.req未定义。要获取cookies,我检查并记录cookies。问题是带有初始字符串的console.log给了我错误。我想我遗漏了一些东西,但不确定是什么 错误是: TypeError:无法读取未定义的属性“headers” Test.getInitialProps=async(ctx:any):承诺发生了什么以及为什么 该问题是由以下原因引起的:加法首先起作用(优先级14),然后是三值运算符(优先

在next.js中,
getInitialProps
可以在服务器或客户端上运行。客户端上的
ctx.req
未定义。要获取cookies,我检查并记录cookies。问题是带有初始字符串的
console.log
给了我错误。我想我遗漏了一些东西,但不确定是什么

错误是:

TypeError:无法读取未定义的属性“headers”

Test.getInitialProps=async(ctx:any):承诺发生了什么以及为什么
该问题是由以下原因引起的:加法首先起作用(优先级14),然后是三值运算符(优先级4)。字符串总是真实的,所以您的条件总是真实的

也就是说,用这个表达式:

'cookies:' + ctx.req ? ctx.req.headers.cookie : document.cookie
它将被评估为:

'cookies: [object object]' ? ctx.req.headers.cookie : document.cookie
这种情况总是会发生,这并不是你想要的

解决方案 您可以将三元括号(优先级21)括在括号内,以便首先对其求值,或者只需将加法改为逗号,从而向
console.log
提供两个参数。这是我的首选解决方案,但我提出了两种解决方案:

console.log('cookies:', ctx.req ? ctx.req.headers.cookie : document.cookie);


我更喜欢第一种解决方案,因为它可以将cookie作为对象记录到控制台;后一种解决方案将cookie强制为一个字符串,该字符串可能给出也可能不会给出所需的结果。

使用逗号代替复数。与三元运算符相比,逗号具有更高的运算符优先级。如果您想先对其求值,请将三元放在括号内。我不认为您认为要传递到
控制台的参数。log
是要传递的参数。插入括号以获得相同的功能类似于
console.log(('cookies:'+ctx.req)?ctx.req.headers.cookie:document.cookie)。您误判了操作的顺序。@艾米,谢谢,请回答,这样我就可以接受三元。我相信这个问题应该重新开始。在关闭前不久添加了错误消息。
console.log('cookies:', ctx.req ? ctx.req.headers.cookie : document.cookie);
console.log('cookies:' + (ctx.req ? ctx.req.headers.cookie : document.cookie));