console.log(String(console.log('Not undefined')) === 'undefined');
console.log(String(console.log('Not undefined')) !== 'Not undefined');
我觉得这两行代码应该给我错误但是?如果有人可以向我解释一下?谢谢
答案 0 :(得分:3)
让我们把它分成几个级别,使这种行为更清晰。首先在第一行内部使用最内层命令:
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
。
答案 1 :(得分:0)
事实上,确实如此。如果在开发人员工具中运行代码,您会注意到它返回三个输出:undefined,“undefined”和“Not undefined”。实际的未定义结果(不是字符串,它确实是未定义的)来自console.log命令本身 - 而console.log能够单独打印输出到控制台,它本身返回未定义。 “undefined”字符串来自String函数,它似乎有自己的输出(不确定原因)。然后,您将获得所需的结果 - “未定义”。实际上,它会将所需的字符串打印到控制台,但是当您尝试将代码分配给变量时,如下所示:
var myVar = console.log(String(console.log('Not undefined')));
myVar返回undefined。但是,它仍然会将输出打印到控制台。
答案 2 :(得分:0)
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
。