Node.js标准值与字符串或布尔值不可比较
我正在通过Node.js以编程方式执行一个shell命令,结果是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"
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。我添加了一些你可能感兴趣的背景和背景。