bigint-and-number.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
description: Mixing BigInt and Number produces a TypeError for addition operator
features: [BigInt]
info: |
Let lprim be ? ToPrimitive(lval).
Let rprim be ? ToPrimitive(rval).
...
Let lnum be ? ToNumeric(lprim)
Let rnum be ? ToNumeric(rprim)
If Type(lnum) does not equal Type(rnum), throw a TypeError exception.
--- |
2206 |
bigint-arithmetic.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
description: BigInt addition arithmetic
features: [BigInt]
--- |
38022 |
bigint-errors.js |
---
description: addition operator ToNumeric with BigInt operands
esid: sec-addition-operator-plus-runtime-semantics-evaluation
features: [BigInt, Symbol, Symbol.toPrimitive, computed-property-names]
--- |
1959 |
bigint-toprimitive.js |
---
description: addition operator ToNumeric with BigInt operands
esid: sec-addition-operator-plus-runtime-semantics-evaluation
features: [BigInt, Symbol.toPrimitive, computed-property-names]
--- |
8800 |
bigint-wrapped-values.js |
---
description: addition operator ToNumeric with BigInt operands
esid: sec-addition-operator-plus-runtime-semantics-evaluation
features: [BigInt, Symbol.toPrimitive, computed-property-names]
--- |
1416 |
browser.js |
|
0 |
coerce-bigint-to-string.js |
---
description: ToString is applied BigInt values in an additive expression with another string
esid: prod-AdditiveExpression
info: |
AdditiveExpression: AdditiveExpression + MultiplicativeExpression
...
7. If Type(lprim) is String or Type(rprim) is String, then
a. Let lstr be ? ToString(lprim).
b. Let rstr be ? ToString(rprim).
c. Return the String that is the result of concatenating lstr and rstr.
...
ToString Applied to the BigInt Type
1. If i is less than zero, return the String concatenation of the String "-" and ToString(-i).
2. Return the String consisting of the code units of the digits of the decimal representation of i.
features: [BigInt]
--- |
1362 |
coerce-symbol-to-prim-err.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
es6id: 12.7.3.1
description: >
Behavior when error thrown by invocation of `Symbol.toPrimitive` method
during coercion
info: |
[...]
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
[...]
ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
[...]
4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
5. ReturnIfAbrupt(exoticToPrim).
6. If exoticToPrim is not undefined, then
a. Let result be Call(exoticToPrim, input, «hint»).
b. ReturnIfAbrupt(result).
features: [Symbol.toPrimitive]
--- |
1510 |
coerce-symbol-to-prim-invocation.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
es6id: 12.7.3.1
description: Invocation of `Symbol.toPrimitive` method during coercion
info: |
[...]
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
[...]
ES6 Section 7.2.12 Abstract Equality Comparison
[...]
10. If Type(x) is either String, Number, or Symbol and Type(y) is Object,
then return the result of the comparison x == ToPrimitive(y).
ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
1. If PreferredType was not passed, let hint be "default".
[...]
4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
5. ReturnIfAbrupt(exoticToPrim).
6. If exoticToPrim is not undefined, then
a. Let result be Call(exoticToPrim, input, «hint»).
[...]
features: [Symbol.toPrimitive]
--- |
1875 |
coerce-symbol-to-prim-return-obj.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
es6id: 12.7.3.1
description: >
Behavior when coercion via `Symbol.toPrimitive` yields an Object
info: |
[...]
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
[...]
ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
[...]
4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
5. ReturnIfAbrupt(exoticToPrim).
6. If exoticToPrim is not undefined, then
a. Let result be Call(exoticToPrim, input, «hint»).
b. ReturnIfAbrupt(result).
c. If Type(result) is not Object, return result.
d. Throw a TypeError exception.
features: [Symbol.toPrimitive]
--- |
1413 |
coerce-symbol-to-prim-return-prim.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
es6id: 12.7.3.1
description: >
Behavior when coercion via `Symbol.toPrimitive` yields a primitive value
info: |
[...]
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
7. If Type(lprim) is String or Type(rprim) is String, then
a. Let lstr be ? ToString(lprim).
b. Let rstr be ? ToString(rprim).
c. Return the String that is the result of concatenating lstr and rstr.
8. Let lnum be ? ToNumber(lprim).
9. Let rnum be ? ToNumber(rprim).
10. Return the result of applying the addition operation to lnum and rnum.
See the Note below 12.8.5.
ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
[...]
4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
5. ReturnIfAbrupt(exoticToPrim).
6. If exoticToPrim is not undefined, then
a. Let result be Call(exoticToPrim, input, «hint»).
b. ReturnIfAbrupt(result).
c. If Type(result) is not Object, return result.
features: [Symbol.toPrimitive]
--- |
2014 |
get-symbol-to-prim-err.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
es6id: 12.7.3.1
description: >
Behavior when error is thrown while accessing `Symbol.toPrimitive` property
info: |
[...]
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
[...]
ES6 Section 7.1.1 ToPrimitive ( input [, PreferredType] )
1. If PreferredType was not passed, let hint be "default".
[...]
4. Let exoticToPrim be GetMethod(input, @@toPrimitive).
5. ReturnIfAbrupt(exoticToPrim).
6. If exoticToPrim is not undefined, then
a. Let result be Call(exoticToPrim, input, «hint»).
[...]
features: [Symbol.toPrimitive]
--- |
1404 |
order-of-evaluation.js |
---
esid: sec-addition-operator-plus-runtime-semantics-evaluation
description: Type coercion order of operations for addition operator
features: [Symbol]
info: |
Evaluate lhs
Evaluate rhs
ToPrimitive(lhs)
ToPrimitive(rhs)
ToNumeric(lhs)
ToNumeric(rhs)
--- |
3121 |
S11.6.1_A1.js |
---
info: |
White Space and Line Terminator between AdditiveExpression and "+" or
between "+" and MultiplicativeExpression are allowed
es5id: 11.6.1_A1
description: Checking by using eval
--- |
1643 |
S11.6.1_A2.1_T1.js |
---
info: Operator x + y uses GetValue
es5id: 11.6.1_A2.1_T1
description: Either Type is not Reference or GetBase is not null
--- |
1112 |
S11.6.1_A2.1_T2.js |
---
info: Operator x + y uses GetValue
es5id: 11.6.1_A2.1_T2
description: If GetBase(x) is null, throw ReferenceError
--- |
541 |
S11.6.1_A2.1_T3.js |
---
info: Operator x + y uses GetValue
es5id: 11.6.1_A2.1_T3
description: If GetBase(y) is null, throw ReferenceError
--- |
541 |
S11.6.1_A2.2_T1.js |
---
info: Operator x + y uses [[Default Value]]
es5id: 11.6.1_A2.2_T1
description: If Type(value) is Object, evaluate ToPrimitive(value, Number)
--- |
3214 |
S11.6.1_A2.2_T2.js |
---
info: Operator x + y uses [[Default Value]]
es5id: 11.6.1_A2.2_T2
description: If Type(value) is Date object, evaluate ToPrimitive(value, String)
--- |
1206 |
S11.6.1_A2.2_T3.js |
---
info: Operator x + y uses [[Default Value]]
es5id: 11.6.1_A2.2_T3
description: If Type(value) is Function, evaluate ToPrimitive(value, Number)
--- |
1276 |
S11.6.1_A2.3_T1.js |
---
info: |
ToNumber(first expression) is called first, and then ToNumber(second
expression)
es5id: 11.6.1_A2.3_T1
description: Checking with "throw"
--- |
987 |
S11.6.1_A2.4_T1.js |
---
info: First expression is evaluated first, and then second expression
es5id: 11.6.1_A2.4_T1
description: Checking with "="
--- |
566 |
S11.6.1_A2.4_T2.js |
---
info: First expression is evaluated first, and then second expression
es5id: 11.6.1_A2.4_T2
description: Checking with "throw"
--- |
881 |
S11.6.1_A2.4_T3.js |
---
info: First expression is evaluated first, and then second expression
es5id: 11.6.1_A2.4_T3
description: Checking with undeclarated variables
--- |
593 |
S11.6.1_A2.4_T4.js |
---
info: First expression is evaluated first, and then second expression
es5id: 11.6.1_A2.4_T4
description: Checking with undeclarated variables
flags: [noStrict]
--- |
442 |
S11.6.1_A3.1_T1.1.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T1.1
description: >
Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
boolean and Boolean object
--- |
1066 |
S11.6.1_A3.1_T1.2.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T1.2
description: >
Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
number and Number object
--- |
980 |
S11.6.1_A3.1_T1.3.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T1.3
description: >
Type(Primitive(x)) and Type(Primitive(y)) vary between Null and
Undefined
--- |
1015 |
S11.6.1_A3.1_T2.1.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T2.1
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Number (primitive or object) or Boolean
(primitive and object)
--- |
1657 |
S11.6.1_A3.1_T2.2.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T2.2
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Number (primitive or object) and Null
--- |
976 |
S11.6.1_A3.1_T2.3.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T2.3
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Number (primitive or object) and Undefined
--- |
1125 |
S11.6.1_A3.1_T2.4.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T2.4
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Boolean (primitive or object) and Undefined
--- |
1168 |
S11.6.1_A3.1_T2.5.js |
---
info: |
If Type(Primitive(x)) is not String and Type(Primitive(y)) is not String,
then operator x + y returns ToNumber(x) + ToNumber(y)
es5id: 11.6.1_A3.1_T2.5
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Boolean (primitive or object) and Null
--- |
1019 |
S11.6.1_A3.2_T1.1.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T1.1
description: >
Type(Primitive(x)) and Type(Primitive(y)) vary between primitive
string and String object
--- |
1314 |
S11.6.1_A3.2_T1.2.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T1.2
description: >
Type(Primitive(x)) and Type(Primitive(y)) vary between Object
object and Function object
--- |
1516 |
S11.6.1_A3.2_T2.1.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T2.1
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between Number (primitive or object) and String
(primitive and object)
--- |
1921 |
S11.6.1_A3.2_T2.2.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T2.2
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between String (primitive or object) and Boolean
(primitive and object)
--- |
1835 |
S11.6.1_A3.2_T2.3.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T2.3
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between String (primitive or object) and Undefined
--- |
1186 |
S11.6.1_A3.2_T2.4.js |
---
info: |
If Type(Primitive(x)) is String or Type(Primitive(y)) is String, then
operator x + y returns the result of concatenating ToString(x) followed
by ToString(y)
es5id: 11.6.1_A3.2_T2.4
description: >
Type(Primitive(x)) is different from Type(Primitive(y)) and both
types vary between String (primitive or object) and Null
--- |
1081 |
S11.6.1_A4_T1.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T1
description: If either operand is NaN, the result is NaN
--- |
1297 |
S11.6.1_A4_T2.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T2
description: The sum of two infinities of opposite sign is NaN
--- |
753 |
S11.6.1_A4_T3.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T3
description: >
The sum of two infinities of the same sign is the infinity of that
sign
--- |
804 |
S11.6.1_A4_T4.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T4
description: >
The sum of an infinity and a finite value is equal to the infinite
operand
--- |
1922 |
S11.6.1_A4_T5.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T5
description: >
The sum of two negative zeros is -0. The sum of two positive
zeros, or of two zeros of opposite sign is +0
--- |
1363 |
S11.6.1_A4_T6.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T6
description: >
The sum of a zero and a nonzero finite value is equal to the
nonzero operand
--- |
1515 |
S11.6.1_A4_T7.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T7
description: >
The sum of two nonzero finite values of the same magnitude and
opposite sign is +0
--- |
1595 |
S11.6.1_A4_T8.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T8
description: >
If the magnitude is too large to represent, the operation
overflows and the result is then an infinity of appropriate sign
--- |
1282 |
S11.6.1_A4_T9.js |
---
info: |
The result of an addition is determined using the rules of IEEE 754
double-precision arithmetics
es5id: 11.6.1_A4_T9
description: >
The addition operator is not always associative ( x + y + z is the
same (x + y) + z, not x + (y + z))
--- |
1407 |
shell.js |
|
0 |
symbol-to-string.js |
---
esid: sec-addition-operator-plus
es6id: 12.7.3
description: Symbol value cannot be converted to a String
info: |
[...]
7. If Type(lprim) is String or Type(rprim) is String, then
a. Let lstr be ? ToString(lprim).
features: [Symbol]
--- |
493 |