【问题标题】: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)。如果您登录了xy,您会看到x === undefined1 && undefined 的结果)和y === 0(`0 && 的结果)。

    && 可能让你感到困惑短路:在第一个表达式中,&& 的第一个操作数是1(真实),因此第二个操作数 - 调用console.log 的表达式 - 必须被评估;在第二个表达式中,&&的第一个操作数是伪造的0,所以&&短路到0不评价(不打电话)console.log("true")

    let 语句是语句而不是表达式,这就是为什么在第二个示例中出现语法错误的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2020-10-01
      • 2016-02-12
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      相关资源
      最近更新 更多