javascript - 为什么在 Javascript 中 `x === x++` 为真而 `x++ === x` 为假?

标签 javascript

你能解释一下这两个逻辑操作之间的区别吗:

let x = 1;

console.log('x = ' + x);
console.log('x ===  x++ : ' + (x ===  x++));

x = 1;

console.log('x = ' + x);
console.log('x++ ===  x : ' + (x++ ===  x));

最佳答案

后缀增量 (y = x++) 确实会增加值,但会计算为之前的值。它几乎等于:

  x² = x; // evaluate previous value of x
  x += 1; // increase x
  y = x²; // use previous value

因此 x === x++ 等于:

  // evaluate left side of ===
  x¹ = x;
  // evaluate right side
  x² = x;
  // ++
  x += 1;
  // comparison
  x¹ === x² // true

x++ === x 是:

  // evaluate left side
  x¹ = x;
  // ++
  x += 1;
  // evaluate right side
  x² = x; // x was already incremented!
  // comparison
  x¹ === x²

关于javascript - 为什么在 Javascript 中 `x === x++` 为真而 `x++ === x` 为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59477674/

相关文章:

javascript - React - 处理 Prop 时的繁重工作

JavaScript 应用()

javascript - 在关闭浏览器时清除缓存的代码

javascript - Chrome 和 IE 专注于 Iframe

javascript - 在 Rails 中将字符串传递给 slim 模板内的 javascript 脚本

javascript - 如何用动画重新渲染 canvasjs 图表?

javascript - 使用 <a href> 提交 POST 表单的最简单的跨浏览器方式是什么?

javascript - script-src 包含无效源 : '' wasm-eval' while using web worker

javascript - 你如何使用 Meteor Iron Router 获取当前路由的名称?

javascript - 以 "For Loop"上传到 Google Cloud Storage(异步)