D 2011-12-11T16:33:56.166 L Dealing\swith\sJavaScript\sObjects P bd5cd2de4b40197b1ba1c916733154148144064c U murphy W 6295

Dealing with JavaScript Objects

Value Conversions

JavaScript Value Scheme Value
undefined (void)
null '()
a boolean satisfies boolean?
a number satisfies number?
a string satisfies string?
a wrapper object the wrapped value
anything satisfies jso?
Scheme Value JavaScript Value
(void) undefined
'() null
satisfies boolean? a boolean
satisfies number? a number
satisfies string? a string
satisfies symbol? a string
satisfies jso? the wrapped object
anything a wrapper object
If any JavaScript operation invoked from Scheme throws an error, a Scheme condition is raised with an equivalent error message. If any Scheme operation invoked from JavaScript raises a condition, a JavaScript error is thrown with an equivalent error message.

Wrapper Records in Scheme

Complex JavaScript objects are not converted to Scheme values but rather encapsulted in a wrapper that allows various natural forms of access from Scheme. If the JavaScript object is a function, the resulting wrapper is callable as a procedure in addition to being accessible using the procedures described below. (jso? VALUE) => BOOLEAN Tests whether the VALUE is a wrapped JavaScript object. (jso-new JSO ARGUMENT ...) => VALUE Converts or unwraps the ARGUMENTs to JavaScript values, calls the JSO as a constructor with those arguments and returns the newly instantiated object converted or wrapped into a Scheme value. (jso-apply JSO ARGUMENT ... REST) => VALUE Converts or unwraps the ARGUMENTs (and the contents of REST) to JavaScript values, calls the JSO as a function with those arguments and returns the result converted or wrapped into a Scheme value. (jso-exists? JSO KEY) => BOOLEAN Checks whether the JSO has a property with a name obtained by stringifying KEY. (jso-ref JSO KEY) => VALUE Stringifies KEY, gets the property of JSO with the resulting name and returns the value converted or wrapped into a Scheme value. (set! (jso-ref JSO KEY) VALUE) => VOID (jso-set! JSO KEY VALUE) => VOID Stringifies KEY, converts or unwraps VALUE to JavaScript and sets the property of JSO with the resulting name to the resulting value. (jso-delete! JSO KEY) Stringifies KEY, tries to delete the property of JSO with the resulting name and returns whether the operation was successful. (:jso KEY JSO [(index INDEX)]) SRFI-42 generator syntax for the enumerable property names of a JavaScript object. (jso-keys JSO) => LIST Retrieves the enumerable property names of a JavaScript object as a list of strings.

Wrapper Objects in JavaScript

Complex Scheme values are not converted to JavaScript but rather encapsulated in a wrapper that allows various natural forms of access from JavaScript. If the Scheme value is a procedure, the resulting wrapper is callable as a function in addition to supporting the generic properties described below. SCO.type => STRING Returns a string describing the type of the wrapped Scheme value. Possible values are "hash-table", "vector", "pair", "procedure", the name of a SRFI-99 record type or the undefined value. SCO.length => INTEGER Returns the size of a hash table or the length of a vector. For other Scheme values the result is the undefined value. SCO[STRING] => VALUE SCO[STRING] = VALUE delete SCO[STRING] The string keys of a Scheme hash table are accessible as mutable, deletable properties. SCO.car => VALUE SCO.cdr => VALUE SCO.c[ad]{2,5}r => VALUE These direct and indirect properties of a pair are accessible as immutable properties. SCO[NUMBER] => VALUE The valid indices of a Scheme vector are accessible as mutable properties. SCO[SYMBOL] => VALUE SCO[SYMBOL] = VALUE The fields of a transparent SRFI-99 record are accessible as (potentially mutable) properties. SCO(ARGUMENT, ...) => VALUE Converts or unwraps the ARGUMENTs to Scheme, applies the Scheme procedure wrapped by SCO to the resulting values and returns the result converted or wrapped into a JavaScript value. String(SCO) => STRING Stringifying a wrapper object produces the display representation of the Scheme value.

Utilities for DOM Objects

(xexpr->jso XEXPR DOCUMENT) => JSO Converts the X-expression XEXPR into a DOM object using factory functions of the given DOCUMENT instance. (jso->xexpr JSO [AT-ATTRIBUTES?]) => XEXPR Converts the DOM object JSO into an X-expression. The optional argument determines whether element attribute lists should be prefixed with the symbol @. Z 690749928b57885469c35dcfcf377063