一元运算符

2018-06-16 15:18 更新

语法:

UnaryExpression : PostfixExpression delete UnaryExpression void UnaryExpression typeof UnaryExpression ++ UnaryExpression -- UnaryExpression + UnaryExpression - UnaryExpression ~ UnaryExpression  ! UnaryExpression

delete 运算符

 产生式 UnaryExpression : delete UnaryExpression 按照下面的过程执行 :

  1. 令 ref 为解释执行 UnaryExpression 的结果。
  2. 如果 Type(ref) 不是 Reference,返回 true。
  3. 若 IsUnresolvableReference(ref) 则 , 如果 IsStrictReference(ref) 为 true ,抛出一个 SyntaxError 异常。 否则,返回 true。
  4. 如果 IsPropertyReference(ref) 为 true 则: 返回以 GetReferencedName(ref) 和 IsStrictReference(ref) 做为参数调用 ToObject(GetBase(ref)) 的 [[Delete]] 内置方法的结果。
  5. 否则 , ref 是到环境记录项绑定的 Reference,所以: 如果 IsStrictReference(ref) 为 true ,抛出一个 SyntaxError 异常 . 令 bindings 为 GetBase(ref). 返回以 GetReferencedName(ref) 为参数调用绑定的 DeleteBinding 具体方法的结果。

 当delete运算符出现在strict模式代码中的时候,若UnaryExpression是到变量,函数形参或者函数名的直接引用则抛出一个SyntaxError异常。此外若delete运算符出现在严格模式代码中且要删除的属性具有特性{ [[Configurable]]: false },抛出一个TypeError异常。

void 运算符

 产生式 UnaryExpression : void UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 调用 GetValue(expr).
  3. 返回 undefined.

 GetValue一定要调用,即使它的值无用,但是可能会有可见的附加效果。

typeof 运算符

 产生式 UnaryExpression : typeof UnaryExpression 按照下面的过程执行 :

  1. 令 val 为解释执行 UnaryExpression 的结果 .
  2. 如果 Type(val) 为 Reference,则: 如果 IsUnresolvableReference(val) 为 true,返回 "undefined"。 令 val 为 GetValue(val).
  3. 返回根据表 20 由 Type(val) 决定的字符串。
typeof 运算符结果
val类型结果
Undefined"undefined"
Null"null"
Boolean"boolean"
Number"number"
String"string"
Object(原生,且没有实现 [[call]])"object"
Object(原生或者宿主且实现了 [[call]])"function"
Object(宿主且没实现 [[call]])由实现定义,但不能是 "undefined", "boolean", "number", or "string"

前自增运算符

 产生式 UnaryExpression : ++ UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 抛出一个 SyntaxError 异常当以下条件全部为真 :Type(expr) 为 ReferenceIsStrictReference(expr) 为 trueType(GetBase(expr)) 为环境记录项GetReferencedName(expr) 是 "eval" 或 "arguments"

前自减运算符

 产生式 UnaryExpression : -- UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 抛出一个 SyntaxError 异常,当以下条件全部为真 :Type(expr) 为 ReferenceIsStrictReference(expr) 为 trueType(GetBase(expr)) 为环境记录项GetReferencedName(expr) 是 "eval" 或 "arguments"

一元 + 运算符

 一元+运算符将其操作数转换为Number类型。

 产生式 UnaryExpression : + UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 返回 ToNumber(GetValue(expr)).

一元 - 运算符

 一元+运算符将其操作数转换为Number类型并反转其正负。注意负的+0产生-0,负的-0产生+0。

 产生式 UnaryExpression : - UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 令 oldValue 为 ToNumber(GetValue(expr)).
  3. 如果 oldValue is NaN ,return NaN.
  4. 返回 oldValue 取负(即,算出一个数字相同但是符号相反的值)的结果。

按位非运算符

 产生式 UnaryExpression : ~ UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 令 oldValue 为 ToInt32(GetValue(expr)).
  3. 返回 oldValue 按位取反的结果。结果为 32 位有符号整数。

逻辑非运算符

 产生式 UnaryExpression : ! UnaryExpression 按照下面的过程执行 :

  1. 令 expr 为解释执行 UnaryExpression 的结果 .
  2. 令 oldValue 为 ToBoolean(GetValue(expr)).
  3. 如果 oldValue 为 true ,返回 false.
  4. 返回 true.


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号