この記事はまだ日本語に翻訳されていません。MDN の翻訳はボランティアによって行われています。是非 MDN に登録し、私たちの力になって下さい。

Removes a specified property from an object.


JSBool JS_DeleteProperty2(JSContext *cx, JSObject *obj, const char *name, jsval *rval);

JSBool JS_DeleteUCProperty2(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, jsval *rval);

JSBool JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval); Added in SpiderMonkey 1.8.1
Name Type Description
cx JSContext * Pointer to a JS context from which to derive runtime information. Requires request. In a JS_THREADSAFE build, the caller must be in a request on this JSContext.
obj JSObject * Object from which to delete a property.
name or id const char * or const jschar * or jsid Name of the property to delete.
namelen size_t (only in JS_DeleteUCProperty2) The length of name in characters; or -1 to indicate that name is null-terminated.
rval jsval * Out parameter. On success, *rval receives JSVAL_FALSE if the property was not deleted because it is permanent and JSVAL_TRUE otherwise.


JS_DeleteProperty2 removes a specified property, name, from an object, obj, and stores JSVAL_TRUE or JSVAL_FALSE in *rval. It behaves like the JavaScript expression delete obj[name]. JS_DeleteUCProperty2 is the Unicode version of the function. JS_DeletePropertyById2 is the same but takes a jsid for the property name.

First, a property lookup is performed. Then one of the following cases applies:

  • If obj has no property with the given name or id, or if obj inherits the specified property from its prototype, then *rval is set to JSVAL_TRUE and obj's JSClass.delProperty hook is called (which may change *rval). No property is deleted, but this is not an error.
  • If obj has the specified property but it is permanent, then *rval receives JSVAL_FALSE. No property is deleted, but this is not an error.
  • Otherwise obj has a non-permanent own property with the given name or id. In this case, *rval is set to JSVAL_TRUE and obj's JSClass.delProperty hook is called (which may change *rval). If the hook returns JS_FALSE, the error is propagated. Otherwise, if obj is sealed, an error is raised. Otherwise, *rval receives JSVAL_TRUE and the property is removed.

These functions return JS_TRUE on success, regardless of whether a property was actually deleted. On error or exception, the return value is JS_FALSE, and the value left in *rval is unspecified.

JSObjectOps.deleteProperty implements this behavior.

(In JavaScript 1.2 and earlier, attempting to delete a permanent property caused an error. There is no longer any way to get this behavior.)

To remove all properties from an object, call JS_ClearScope.

MXR ID Search for JS_DeleteProperty2
MXR ID Search for JS_DeleteUCProperty2
MXR ID Search for JS_DeletePropertyById2

Document Tags and Contributors

Contributors to this page: MMondor, Dria, Jorend
最終更新者: Jorend,