【问题标题】:What is the behaviour called where javascript outputs a non-boolean value if entire expression is true如果整个表达式为真,javascript输出非布尔值的行为是什么
【发布时间】:2021-04-27 20:59:51
【问题描述】:

我知道以前有人问过这个问题,但我似乎找不到合适的关键字来找到我的答案。

在javascript中,你可以这样做

console.log(true && "hello world"); // prints hello world
console.log(false && "hello world"); // prints false

这种行为叫什么?如果整个表达式的计算结果为 true,javascript 将在哪里输出变量的内容?

【问题讨论】:

  • 我不知道它有没有名字,事情就是这样。这有点像短路
  • @CertainPerformance “短路”确实是它的名字!
  • 其他语言短路了,但是 JavaScript 的 evaluating 作为布尔值然后 resulting 在预强制实际值中的行为是不寻常的。我从未见过有名字的行为。
  • @Pointy - 这在 MDN 上非常明确:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - 并且在规范中(准确地说明了您在 short-circuit semantics 定义下方所说的内容)
  • 尝试搜索“真值”和“假值”

标签: javascript boolean


【解决方案1】:

在 React 世界中,这称为 条件渲染,使用 && 运算符。这种技术利用 Javascript 短路 比较来改变视图;在这种情况下,记录值。这是一种在属性更改时动态渲染不同对象的简洁有用的方法。

如果您不进行渲染,那将只是一个很好的老式短路,它已经使用了几十年,并且一直可以追溯到 Kernaghan 和 Ritchie 以及 C 语言。例如。引用对象属性时可以使用 OR 运算符来防范undefined 值;例如:

const cheese = {}
console.log(cheese.cheddar) // unsafe
console.log(cheese.cheddar || "") // safe

在这里,我们并不关心实际值,我们只需要truthyfalsy 分辨率。

还要注意双键!! 运算符,它将整个该死的表达式转换为布尔值:

console.log(!!(true && "hello world")) // true

参考资料: https://reactjs.org/docs/conditional-rendering.html https://codeburst.io/javascript-short-circuit-conditionals-bbc13ac3e9eb What is the !! (not not) operator in JavaScript?

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多