console.log(String(console.log('Not undefined')) === 'undefined');
console.log(String(console.log('Not undefined')) !== 'Not undefined');我觉得这两行代码应该是错误的,但是?如果有人能给我解释一下?谢谢。
发布于 2017-08-25 06:03:22
让我们将其拆分成不同的级别,以使此行为更清晰。首先,在第一行中执行最内部的命令:
console.log('Not undefined')在这里,console.log函数回显"Not undefined",但它返回undefined。这是JavaScript中的default behavior of all functions。如果它们不显式返回某些内容,它们将返回undefined值。从这里开始,我们使用下面这行代码将undefined转换为string:
String(console.log('Not undefined'))如果我们结合前面的洞察力,在JavaScript运行时会是这样的:
String(undefined)它的计算结果是字符串"undefined"。接下来,您将执行一个文本比较(=== compares values and types),其计算结果为true。
第二行是相同的,只是现在你在比较String(console.log('Not undefined'))不是'Not undefined',所以你也得到了true。
发布于 2017-08-25 05:49:16
事实上,确实是这样的。如果在开发人员工具中运行代码,您会注意到它返回三个输出:未定义、“未定义”和“未定义”。实际的未定义结果(不是字符串,它实际上是未定义的)来自console.log命令本身-虽然console.log能够将输出单独打印到控制台,但它本身返回的结果是未定义的。“未定义的”字符串来自string函数,该函数似乎有自己的输出(不知道为什么)。然后,你会得到想要的结果--“不是未定义的”。实际上,它确实会将所需的字符串打印到控制台,但当您尝试将代码分配给变量时,如下所示:
var myVar = console.log(String(console.log('Not undefined')));
myVar返回未定义的。但是,它仍然将输出打印到控制台。
发布于 2017-08-25 05:57:37
console.log(String(console.log('Not undefined')) === 'undefined');对于第一个,您有来自最深层的调用:console.log('Not undefined'),它显然输出Not undefined。然后,结果(而不是控制台中的实际给定字符串)被提供给String()函数,该函数返回undefined的字符串版本,即'undefined'。总而言之,与'undefined'相比,它返回true。
对于另一个来说,它几乎是一样的:
console.log(String(console.log('Not undefined')) !== 'Not undefined');在这里,console.log('Not undefined')只是将字符串记录到控制台,但将 undefined传递给String(),后者将其转换为"undefined"。然后与"Not undefined"相比,两者都是字符串,但它们是不同的。它返回true。
https://stackoverflow.com/questions/45871333
复制相似问题