console.log(String(console.log('Not undefined'))==='undefined'); console.log(String(console.log('Not undefined'))!=='Not undefined');

时间:2017-08-24 21:41:08

标签: javascript

console.log(String(console.log('Not undefined')) === 'undefined');
console.log(String(console.log('Not undefined')) !== 'Not undefined');

我觉得这两行代码应该给我错误但是?如果有人可以向我解释一下?谢谢

3 个答案:

答案 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