Source code
Revision control
Copy as Markdown
Other Tools
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-object.getownpropertydescriptor
description: >
String primitive as first argument is coerced to object.
info: |
Object.getOwnPropertyDescriptor ( O, P )
1. Let obj be ? ToObject(O).
[...]
3. Let desc be ? obj.[[GetOwnProperty]](key).
4. Return FromPropertyDescriptor(desc).
String Exotic Objects
String exotic objects always have a data property named "length" whose value is the number
of code unit elements in the encapsulated String value. Both the code unit data properties
and the "length" property are non-writable and non-configurable.
---*/
assert.sameValue(Object.getOwnPropertyDescriptor('', '0'), undefined);
var indexDesc = Object.getOwnPropertyDescriptor('foo', '0');
assert.sameValue(indexDesc.value, 'f', '[[Value]]');
assert.sameValue(indexDesc.writable, false, '[[Writable]]');
assert.sameValue(indexDesc.enumerable, true, '[[Enumerable]]');
assert.sameValue(indexDesc.configurable, false, '[[Configurable]]');
var lengthDesc = Object.getOwnPropertyDescriptor('foo', 'length');
assert.sameValue(lengthDesc.value, 3, '[[Value]]');
assert.sameValue(lengthDesc.writable, false, '[[Writable]]');
assert.sameValue(lengthDesc.enumerable, false, '[[Enumerable]]');
assert.sameValue(lengthDesc.configurable, false, '[[Configurable]]');
reportCompare(0, 0);