Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

重学js —— 二进制按位运算符和二进制逻辑运算符以及条件运算符 #76

Open
lizhongzhen11 opened this issue Feb 24, 2020 · 0 comments
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN

Comments

@lizhongzhen11
Copy link
Owner

lizhongzhen11 commented Feb 24, 2020

二进制按位运算符二进制逻辑运算符以及条件运算符

二进制按位运算符求值

  • &(按位与), ^(按位异或), |(按位或)

A : A @ B

  1. 定义 lrefA 的求值结果
  2. 定义 lval? GetValue(lref)
  3. 定义 rrefA 的求值结果
  4. 定义 rval? GetValue(rref)
  5. 定义 lnum? ToNumeric(lval)
  6. 定义 rnum? ToNumeric(rval)
  7. 如果 lnum 的类型和 rnum 不同,抛 TypeError 异常
  8. 定义 Tlnum 的类型
  9. 如果 @&,返回 T::bitwiseAND(lnum, rnum) (PS:可能是 BigInt 类型的 ::bitwiseAND
  10. 如果 @|,返回 T::bitwiseOR(lnum, rnum) (PS:可能是 BigInt 类型的 ::bitwiseOR
  11. 否则,
    1. 断言:@^
    2. 返回 T::bitwiseXOR(lnum, rnum) (PS:可能是 BigInt 类型的 ::bitwiseXOR

&&

逻辑与表达式 : 逻辑与表达式 && 按位或表达式

  1. 定义 lref逻辑与表达式 求值结果
  2. 定义 lval? GetValue(lref)
  3. 定义 lbool! ToBoolean(lval)
  4. 如果 lboolfalse,返回 lval
  5. 定义 rref按位或表达式 求值结果
  6. 返回 ? GetValue(rref)

||

逻辑或表达式 : 逻辑或表达式 || 逻辑与表达式

  1. 定义 lref逻辑或表达式 求值结果
  2. 定义 lval? GetValue(lref)
  3. 定义 lbool! ToBoolean(lval)
  4. 如果 lbooltrue,返回 lval
  5. 定义 rref逻辑与表达式 求值结果
  6. 返回 ? GetValue(rref)

??

这个叫空值合并运算符(MDN),以前真没见过,兼容性问题多

合并表达 : 合并表达头 ?? 按位或表达式

  1. 定义 lref合并表达头 求值结果
  2. 定义 lval? GetValue(lref)
  3. 如果 lvalundefinednull
    1. 定义 rref按位或表达式 求值结果
    2. 返回 ? GetValue(rref)
  4. 否则,返回 lval

条件运算符 ? :

  1. 定义 lref短路表达式 求值结果
  2. 定义 lval! ToBoolean(? GetValue(lref))
  3. 如果 lvaltrue
    1. 定义 trueRef 为第一个 赋值表达式 求值结果
    2. 返回 ? GetValue(trueRef)
  4. 否则,
    1. 定义 falseRef 为第二个 赋值表达式 求值结果
    2. 返回 ? GetValue(falseRef)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js基础 Good for newcomers 重学js 重学js系列 规范+MDN
Projects
None yet
Development

No branches or pull requests

1 participant