Javascript 真实条件未检测布尔值

我有这部分代码:


   let values = true;


let msg = 'message1';

        if(values) {let msg = 'message2';}


        console.log(msg);

而且我总是在控制台日志中有message1 。


据我所知,if(values)应该满足任何真值的 if 语句,包括 true、任何非零数字、任何非空字符串值、任何对象或数组引用等...


那么为什么它不起作用?


慕盖茨4494581
浏览 102回答 2
2回答

肥皂起泡泡

使用声明的变量let的范围是包含它的最内部代码块。在您的示例中,有两个不同的变量名为msg.第一个 ( let msg = 'message1') is the one printed by console.log(msg);`。第二个 (let msg = 'message2') 仅存在于{...}声明它的块 ( ) 中。它在代码执行离开块时被销毁(在})。在该块内部,命名的外部变量msg不可用。没有必要多次声明一个变量(除非你的目的是得到你现在遇到的效果)。在第一次使用之前只声明一次。此代码按预期工作:let values = true;let msg = 'message1';if (values) {  msg = 'message2';}console.log(msg);您可以console.log()在if块内添加调用以检查它是否已执行(因为条件是true):let values = true;let msg = 'message1';if (values) {  let msg = 'message2';  console.log('inner: ' + msg);}console.log('outer: ' + msg);

largeQ

声明没有问题if。它运行正常,但问题是您msg再次定义了变量let msg = 'message2';那应该替换为msg = 'message2',它将起作用。let values = true;let msg = 'message1';if(values) {  msg = 'message2';}console.log(msg);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript