- Let O be the result of calling ToObject passing the this value as the argument.
- ReturnIfAbrupt(O).
- Let len be ToLength(Get(O, "length")).
- ReturnIfAbrupt(len).
- If len is 0, return false.
- Let n be ToInteger(fromIndex). (If fromIndex is undefined, this step produces the value 0.)
- ReturnIfAbrupt(n).
- If n ≥ 0, then
- Let k be n.
- Else n < 0,
- Let k be len + n.
- If k < 0, then let k be 0.
- Repeat, while k < len
- Let elementK be the result of Get(O, ToString(k)).
- ReturnIfAbrupt(elementK).
- If SameValueZero(searchElement, elementK) is true, return true.
- Increase k by 1.
- Return *false
- let O = @Try(ToObject(this))
- let len = @Try(ToLength(Get(O, "length")))
- if len is 0, return false
- let n = @Try(ToInteger(fromIndex)) (If fromIndex is undefined, this step produces the value 0.)
- if n ≥ 0, then
- let k be n
- else n < 0,
- let k = len + n
- if k < 0, then let k = 0
- while k < len
- let elementK = @Try(Get(O, ToString(k)))
- if SameValueZero(searchElement, elementK) is true, return true.
- increment k
- Return false
- let O = ToObject(this)?
- let len = ToLength(Get(O, "length"))?
- if len is 0, return false.
- let n = ToInteger(fromIndex)? (If fromIndex is undefined, this step produces the value 0.)
- if n ≥ 0, then
- let k be n
- else n < 0,
- let k = len + n
- if k < 0, then let k = 0
- while k < len
- let elementK = Get(O, ToString(k))?
- if SameValueZero(searchElement, elementK) is true, return true.
- increment k
- Return false