zoukankan      html  css  js  c++  java
  • JS 逻辑与为何能返回其运算值而非布尔值

    当笔者刚进入 JS 的世界的时候,一直为它的灵活写法感到着迷,同时也有一些疑惑

    希望当对象存在时,得到其属性,可以这么写 parent && parent.child,为什么这个返回的不是一个布尔值,正如 C 语言所表现的。

    笔者翻阅 ES 5,得到ES5/表达式/二元逻辑运算符找到如下答案。

    二元逻辑运算符

    LogicalANDExpression :
       BitwiseORExpression
       LogicalANDExpression && BitwiseORExpression
    
    
    语义:
    
    产生式 LogicalANDExpression : LogicalANDExpression && BitwiseORExpression 按照下面的过程执行:
    
    令 lref 为解释执行 LogicalANDExpression 的结果。
    令 lval 为 GetValue(lref)。
    如果 ToBoolean(lval) 为 false,返回 lval。
    令 rref 为解释执行 BitwiseORExpression 的结果。
    返回 GetValue(rref)。
    

    如果左表达式执行后不能转化为 false,那么返回右表达式的value,其中转化过程 ToBoolean 规则如下

    代入 parent && parent.child 可以知道当 parent 是一个对象时,ToBoolean 能使它转化为 true,则返回 parent.child 的值。

    上图中 GetValue 的转化过程比较复杂,简述就是返回其 [[Get]] 或者 [[Value]] 的值。

  • 相关阅读:
    删除指定字符
    Palindromes _easy version
    统计元音
    查找最大元素
    首字母变大写
    Intent加强
    GUI_键盘事件
    GUI_鼠标事件
    GUI_事件监听机制与ActionListener演示
    GUI概述与Frame演示
  • 原文地址:https://www.cnblogs.com/everlose/p/12498219.html
Copyright © 2011-2022 走看看