【问题标题】:Is Variable Initialization statement an expression in JavaScript?变量初始化语句是 JavaScript 中的表达式吗?
【发布时间】:2023-02-01 19:32:05
【问题描述】:
以下作品:
let x = 1 && console.log("true"); (-- logs true)
let y = 0 && console.log("true"); (-- logs nothing)
上面显示 && 运算符之前的语句就像一个表达式。
然后我试了这个:
console.log(let m = 5); // Error
这里发生了什么?如果那是一个表达式那么为什么它在这种情况下不起作用,如果它不是一个表达式那么为什么它在前两种情况下起作用?
【问题讨论】:
标签:
javascript
variables
expression
【解决方案1】:
以下作品——
let x = 1 && console.log("true"); (-- logs true)
let y = 0 && console.log("true"); (-- logs nothing)
上面显示 && 运算符之前的语句就像一个表达式
这是你弄错的地方。 && 运算符用于加入表达, 不是声明(即使它具有控制流效果)。这解析如下:
let x = (1 && console.log("true")); (-- logs true)
let y = (0 && console.log("true")); (-- logs nothing)
console.log 在这里充当表达式,而不是 let ...。函数调用总是返回一个值(可能是undefined)。如果您登录了x 和y,您会看到x === undefined(1 && undefined 的结果)和y === 0(`0 && 的结果)。
&& 可能让你感到困惑短路:在第一个表达式中,&& 的第一个操作数是1(真实),因此第二个操作数 - 调用console.log 的表达式 - 必须被评估;在第二个表达式中,&&的第一个操作数是伪造的0,所以&&短路到0,不评价(不打电话)console.log("true")。
let 语句是语句而不是表达式,这就是为什么在第二个示例中出现语法错误的原因。