一元運(yùn)算符

2018-06-16 15:18 更新

語(yǔ)法:

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

delete 運(yùn)算符

 產(chǎn)生式 UnaryExpression : delete UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 ref 為解釋執(zhí)行 UnaryExpression 的結(jié)果。
  2. 如果 Type(ref) 不是 Reference,返回 true。
  3. 若 IsUnresolvableReference(ref) 則 , 如果 IsStrictReference(ref) 為 true ,拋出一個(gè) SyntaxError 異常。 否則,返回 true。
  4. 如果 IsPropertyReference(ref) 為 true 則: 返回以 GetReferencedName(ref) 和 IsStrictReference(ref) 做為參數(shù)調(diào)用 ToObject(GetBase(ref)) 的 [[Delete]] 內(nèi)置方法的結(jié)果。
  5. 否則 , ref 是到環(huán)境記錄項(xiàng)綁定的 Reference,所以: 如果 IsStrictReference(ref) 為 true ,拋出一個(gè) SyntaxError 異常 . 令 bindings 為 GetBase(ref). 返回以 GetReferencedName(ref) 為參數(shù)調(diào)用綁定的 DeleteBinding 具體方法的結(jié)果。

 當(dāng)delete運(yùn)算符出現(xiàn)在strict模式代碼中的時(shí)候,若UnaryExpression是到變量,函數(shù)形參或者函數(shù)名的直接引用則拋出一個(gè)SyntaxError異常。此外若delete運(yùn)算符出現(xiàn)在嚴(yán)格模式代碼中且要?jiǎng)h除的屬性具有特性{ [[Configurable]]: false },拋出一個(gè)TypeError異常。

void 運(yùn)算符

 產(chǎn)生式 UnaryExpression : void UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 調(diào)用 GetValue(expr).
  3. 返回 undefined.

 GetValue一定要調(diào)用,即使它的值無(wú)用,但是可能會(huì)有可見(jiàn)的附加效果。

typeof 運(yùn)算符

 產(chǎn)生式 UnaryExpression : typeof UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 val 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 如果 Type(val) 為 Reference,則: 如果 IsUnresolvableReference(val) 為 true,返回 "undefined"。 令 val 為 GetValue(val).
  3. 返回根據(jù)表 20 由 Type(val) 決定的字符串。
typeof 運(yùn)算符結(jié)果
val類(lèi)型結(jié)果
Undefined"undefined"
Null"null"
Boolean"boolean"
Number"number"
String"string"
Object(原生,且沒(méi)有實(shí)現(xiàn) [[call]])"object"
Object(原生或者宿主且實(shí)現(xiàn)了 [[call]])"function"
Object(宿主且沒(méi)實(shí)現(xiàn) [[call]])由實(shí)現(xiàn)定義,但不能是 "undefined", "boolean", "number", or "string"

前自增運(yùn)算符

 產(chǎn)生式 UnaryExpression : ++ UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 拋出一個(gè) SyntaxError 異常當(dāng)以下條件全部為真 :Type(expr) 為 ReferenceIsStrictReference(expr) 為 trueType(GetBase(expr)) 為環(huán)境記錄項(xiàng)GetReferencedName(expr) 是 "eval" 或 "arguments"

前自減運(yùn)算符

 產(chǎn)生式 UnaryExpression : -- UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 拋出一個(gè) SyntaxError 異常,當(dāng)以下條件全部為真 :Type(expr) 為 ReferenceIsStrictReference(expr) 為 trueType(GetBase(expr)) 為環(huán)境記錄項(xiàng)GetReferencedName(expr) 是 "eval" 或 "arguments"

一元 + 運(yùn)算符

 一元+運(yùn)算符將其操作數(shù)轉(zhuǎn)換為Number類(lèi)型。

 產(chǎn)生式 UnaryExpression : + UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 返回 ToNumber(GetValue(expr)).

一元 - 運(yùn)算符

 一元+運(yùn)算符將其操作數(shù)轉(zhuǎn)換為Number類(lèi)型并反轉(zhuǎn)其正負(fù)。注意負(fù)的+0產(chǎn)生-0,負(fù)的-0產(chǎn)生+0。

 產(chǎn)生式 UnaryExpression : - UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 令 oldValue 為 ToNumber(GetValue(expr)).
  3. 如果 oldValue is NaN ,return NaN.
  4. 返回 oldValue 取負(fù)(即,算出一個(gè)數(shù)字相同但是符號(hào)相反的值)的結(jié)果。

按位非運(yùn)算符

 產(chǎn)生式 UnaryExpression : ~ UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 令 oldValue 為 ToInt32(GetValue(expr)).
  3. 返回 oldValue 按位取反的結(jié)果。結(jié)果為 32 位有符號(hào)整數(shù)。

邏輯非運(yùn)算符

 產(chǎn)生式 UnaryExpression : ! UnaryExpression 按照下面的過(guò)程執(zhí)行 :

  1. 令 expr 為解釋執(zhí)行 UnaryExpression 的結(jié)果 .
  2. 令 oldValue 為 ToBoolean(GetValue(expr)).
  3. 如果 oldValue 為 true ,返回 false.
  4. 返回 true.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)