为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript 真实条件未检测布尔值

Javascript 真实条件未检测布尔值

慕盖茨4494581 2023-04-14 17:10:00
我有这部分代码:   let values = true;let msg = 'message1';        if(values) {let msg = 'message2';}        console.log(msg);而且我总是在控制台日志中有message1 。据我所知,if(values)应该满足任何真值的 if 语句,包括 true、任何非零数字、任何非空字符串值、任何对象或数组引用等...那么为什么它不起作用?
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

使用声明的变量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);


查看完整回答
反对 回复 2023-04-14
?
largeQ

TA贡献2039条经验 获得超7个赞

声明没有问题if。它运行正常,但问题是您msg再次定义了变量let msg = 'message2';


那应该替换为msg = 'message2',它将起作用。


let values = true;


let msg = 'message1';

if(values) {

  msg = 'message2';

}

console.log(msg);


查看完整回答
反对 回复 2023-04-14
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信