Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
Node.js标准值与字符串或布尔值不可比较_Node.js - Fatal编程技术网

Node.js标准值与字符串或布尔值不可比较

Node.js标准值与字符串或布尔值不可比较,node.js,Node.js,我正在通过Node.js以编程方式执行一个shell命令,结果是true。。。从字面上看,它是true,但我无法将它与boolean或string进行比较 const exec = require('child_process').exec; exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => { // here stdout has value "true"

我正在通过Node.js以编程方式执行一个shell命令,结果是
true
。。。从字面上看,它是
true
,但我无法将它与
boolean
string
进行比较

const exec = require('child_process').exec;

exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => {
   // here stdout has value "true"
   console.log(typeof stdout) // returns "string"
   console.log(stdout == 'true') // returns false
   console.log(stdout == true) // returns false
});

为了以防万一,我尝试转换stdout.toString(),但结果是一样的。我很困惑。有什么想法吗?

您需要修剪字符串,因为它的末尾有不可见的换行空白

const exec = require('child_process').exec;

exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => {
    // here stdout has value "true"
    console.log(stdout.trimRight() === 'true')
});
请注意,尾随的换行符不是节点在做任何奇怪的事情。通常情况下,程序会在其控制台输出中附加一个换行符,特别是当有人看到它时。实际上,这是
console.log()
为您所做的

想象一下,如果您每天使用的程序(
ls
git
,…)在没有换行符的情况下终止其输出,则使用您的终端。您的提示(您键入的前一个标记,例如,
$
)将与上一个程序的输出挤在同一行上。恶心

甚至文件也通常以换行符结尾,因为这样可以将来自不同来源(如日志文件)的数据连接在一起,并使用UNIX工具。还有一种广泛采用的做法是让代码编辑器为您强制执行此操作。简言之,你会看到这一切的地方


childProcess.exec()
方法没有对这些换行约定进行任何假设,它的级别太低,因此它将它们保留在适当的位置。除此之外,您可以轻松地在
exec()
之上创建一个抽象,为您处理修剪。

您需要修剪字符串,因为它的末尾有一个不可见的换行空格

const exec = require('child_process').exec;

exec('docker inspect -f {{.State.Running}} service-redis', (err, stdout, stderr) => {
    // here stdout has value "true"
    console.log(stdout.trimRight() === 'true')
});
请注意,尾随的换行符不是节点在做任何奇怪的事情。通常情况下,程序会在其控制台输出中附加一个换行符,特别是当有人看到它时。实际上,这是
console.log()
为您所做的

想象一下,如果您每天使用的程序(
ls
git
,…)在没有换行符的情况下终止其输出,则使用您的终端。您的提示(您键入的前一个标记,例如,
$
)将与上一个程序的输出挤在同一行上。恶心

甚至文件也通常以换行符结尾,因为这样可以将来自不同来源(如日志文件)的数据连接在一起,并使用UNIX工具。还有一种广泛采用的做法是让代码编辑器为您强制执行此操作。简言之,你会看到这一切的地方


childProcess.exec()
方法没有对这些换行约定进行任何假设,它的级别太低,因此它将它们保留在适当的位置。除此之外,您可以轻松地在
exec()
之上创建一个抽象,为您处理修剪。

stdout
是一个流。可能是因为最后有一个
\n
。你有没有试过stdout.startsWith('true')。。。你是对的
stdout
是一个流。可能是因为末尾有一个
\n
。你有没有试过stdout.startsWith('true')。。。你是对的!既然您提到了它,我注意到在
stdout
的值后面总是有一个空行,因此在末尾有一个
\n
。Tnx!没问题@Milkncookiez。我添加了一些您可能感兴趣的背景和上下文。既然您提到了它,我注意到在
stdout
的值后面总是有一个空行,因此在末尾有一个
\n
。Tnx!没问题@Milkncookiez。我添加了一些你可能感兴趣的背景和背景。