Any object property can have zero or more property attributes set.
Some property attributes are defined in the ECMAScript standard, in ECMA 262-3 §8.6.1. SpiderMonkey additionally defines several non-standard property attributes.
The JSAPI expresses property attributes as a value of type unsigned, the bitwise OR of zero or more of the JSPROP flags described below.
An application can set property attributes when creating a property. See JS_DefineProperty, JS_FS, and JS_FN
| Flag | Description | 
|---|---|
| JSPROP_ENUMERATE | The property is visible to JavaScript  This is the inverse of the ECMA standard DontEnum attribute. | 
| JSPROP_READONLY | The property's value cannot be set. In JavaScript 1.2 and lower, it is an error to attempt to assign a value to a read-only property. In JavaScript 1.3 and higher, as in ECMAScript, attempts to set a value on a read-only property are ignored. This is the ECMA standard ReadOnly attribute. | 
| JSPROP_PERMANENT | The property cannot be deleted. In JavaScript 1.2 and lower, it is an error to attempt to delete a permanent property. In JavaScript 1.3 and higher, as in ECMAScript, such attempts are ignored. This is the ECMA standard DontDelete attribute. The JavaScript language does not provide any way for a script to delete a permanent property. | 
| JSPROP_PROPOP_ACCESSORS | Passed to  | 
| JSPROP_GETTER | The property's getter is a JavaScript  | 
| JSPROP_SETTER | The property's setter is a JavaScript  | 
| JSPROP_SHARED | The property is shared. This is usually the right thing for properties that have getters or setters. This has three effects: 
 | 
| JSPROP_INDEX | The property's id is represented internally as an integer, not a string. Obsolete since JSAPI 39 This flag has an additional special meaning when used with  | 
| JSPROP_DEFINE_LATE | Don't define property when initially creating the constructor. Some objects like Function/Object have self-hosted functions that can only be defined after the initialization is already finished. Added in SpiderMonkey 38 | 
| JSFUN_STUB_GSOPS | Use  | 
| JSFUN_CONSTRUCTOR | Native that can be called as a constructor. Added in SpiderMonkey 17 | 
| JSPROP_REDEFINE_NONCONFIGURABLE | If set, will allow redefining a non-configurable property, but only on a non-DOM global. This is a temporary hack that will need to go away in bug 1105518. Added in SpiderMonkey 38 | 
| JSPROP_RESOLVING | 
      Resolve hooks and enumerate hooks must pass this flag when calling
       
       For enumerate hooks, triggering the resolve hook would be merely silly, not fatal, except in some cases involving non-configurable properties. Added in SpiderMonkey 45 | 
| JSPROP_IGNORE_ENUMERATE | Ignore the value in  | 
| JSPROP_IGNORE_READONLY | Ignore the value in  | 
| JSPROP_IGNORE_PERMANENT | Ignore the value in  | 
| JSPROP_IGNORE_VALUE | Ignore the  | 
See Also
- bug 575997 - for JSPROP_SHARED
- bug 1088002 - added JSPROP_PROPOP_ACCESSORS
- bug 825199 - added JSPROP_DEFINE_LATE
- bug 365851 - added JSFUN_STUB_GSOPS
- bug 581263 - added JSFUN_CONSTRUCTOR
- bug 1101123 - added JSPROP_REDEFINE_NONCONFIGURABLE
- bug 1037770 - added JSOP_IGNORE_*
- bug 1105518 - for JSPROP_REDEFINE_NONCONFIGURABLE
- bug 1138489 - removed JSPROP_INDEX
- bug 1140482 - added JSPROP_RESOLVING