- class QJSManagedValue#
QJSManagedValue
represents a value on the JavaScript heap belonging to aQJSEngine
. More…Synopsis#
Methods#
def
__init__()
def
call()
def
deleteProperty()
def
engine()
def
equals()
def
hasOwnProperty()
def
hasProperty()
def
isArray()
def
isBoolean()
def
isDate()
def
isError()
def
isFunction()
def
isInteger()
def
isJsMetaType()
def
isNull()
def
isNumber()
def
isObject()
def
isQMetaObject()
def
isQObject()
def
isString()
def
isSymbol()
def
isUndefined()
def
isUrl()
def
isVariant()
def
jsMetaMembers()
def
jsMetaType()
def
property()
def
prototype()
def
setProperty()
def
setPrototype()
def
strictlyEquals()
def
toBoolean()
def
toDateTime()
def
toInteger()
def
toJSValue()
def
toNumber()
def
toPrimitive()
def
toQMetaObject()
def
toQObject()
def
toString()
def
toUrl()
def
toVariant()
def
type()
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
The
QJSManagedValue
class allows interaction with JavaScript values in most ways you can interact with them from JavaScript itself. You can get and set properties and prototypes, and you can access arrays. Additionally, you can transform the value into the Qt counterparts of JavaScript objects. For example, a Url object may be transformed into a QUrl.A
QJSManagedValue
is always bound to a particularQJSEngine
. You cannot use it independently. This means that you cannot have aQJSManagedValue
from one engine be a property or a proptotype of aQJSManagedValue
from a different engine.In contrast to
QJSValue
, almost all values held byQJSManagedValue
live on the JavaScript heap. There is no inline or unmanaged storage. Therefore, you can get the prototype of a primitive value, and you can get thelength
property of a string.Only default-constructed or moved-from QJSManagedValues do not hold a value on the JavaScript heap. They represent
undefined
, which doesn’t have any properties or prototypes.Also in contrast to
QJSValue
,QJSManagedValue
does not catch any JavaScript exceptions. If an operation on aQJSManagedValue
causes an error, it will generally return anundefined
value andhasError()
will returntrue
afterwards. You can then catch the exception usingcatchError()
, or pass it up the stack, at your own discretion.Note
As the reference to the value on the JavaScript heap has to be freed on destruction, you cannot move a
QJSManagedValue
to a different thread. The destruction would take place in the new thread, which would create a race condition with the garbage collector on the original thread. This also means that you cannot hold aQJSManagedValue
beyond the lifespan of its engine.The recommended way of working with a
QJSManagedValue
is creating it on the stack, possibly by moving aQJSValue
and adding an engine, then performing the necessary operations on it, and finally moving it back into aQJSValue
for storage. Moving betweenQJSManagedValue
andQJSValue
is fast.- class Type#
This enum represents the JavaScript native types, as specified by ECMA-262 .
Constant
Description
QJSManagedValue.Undefined
The
undefined
typeQJSManagedValue.Boolean
The
boolean
typeQJSManagedValue.Number
The
number
typeQJSManagedValue.String
The
string
typeQJSManagedValue.Object
The
object
typeQJSManagedValue.Symbol
The
symbol
typeQJSManagedValue.Function
The
function
typeNote that the
null
value is not a type of itself but rather a special kind of object. You can query aQJSManagedValue
for this condition using theisNull()
method. Furthermore, JavaScript has no integer type, but it knows a special treatment of numbers in preparation for integer only operations. You can query aQJSManagedValue
to find out whether it holds the result of such a treatment by using theisInteger()
method.
Creates a
QJSManagedValue
fromvalue
, using the heap ofengine
. Ifvalue
is itself managed and the engine it belongs to is notengine
, the result is anundefined
value, and a warning is generated.- __init__()
Creates a
QJSManagedValue
that represents the JavaScriptundefined
value. This is the only value not stored on the JavaScript heap. Callingengine()
on a default-constructedQJSManagedValue
will return nullptr.- __init__(variant, engine)
- Parameters:
variant – object
engine –
QJSEngine
Creates a
QJSManagedValue
fromvariant
using the heap ofengine
.- __init__(value, engine)
- Parameters:
value –
QJSPrimitiveValue
engine –
QJSEngine
Creates a
QJSManagedValue
fromvalue
using the heap ofengine
.- __init__(string, engine)
- Parameters:
string – str
engine –
QJSEngine
Creates a
QJSManagedValue
fromstring
using the heap ofengine
.If this
QJSManagedValue
represents a JavaScript FunctionObject, calls it with the givenarguments
, and returns the result. Otherwise returns a JavaScriptundefined
value.The
arguments
have to be either primitive values or belong to the sameQJSEngine
as thisQJSManagedValue
. Otherwise the call is not carried out and a JavaScriptundefined
value is returned.If this
QJSManagedValue
represents a JavaScript FunctionObject, calls it as constructor with the givenarguments
, and returns the result. Otherwise returns a JavaScriptundefined
value.The
arguments
have to be either primitive values or belong to the sameQJSEngine
as thisQJSManagedValue
. Otherwise the call is not carried out and a JavaScriptundefined
value is returned.- callWithInstance(instance[, arguments={}])#
If this
QJSManagedValue
represents a JavaScript FunctionObject, calls it oninstance
with the givenarguments
, and returns the result. Otherwise returns a JavaScriptundefined
value.The
arguments
and theinstance
have to be either primitive values or belong to the sameQJSEngine
as thisQJSManagedValue
. Otherwise the call is not carried out and a JavaScriptundefined
value is returned.- deleteProperty(name)#
- Parameters:
name – str
- Return type:
bool
Deletes the property
name
from thisQJSManagedValue
. Returnstrue
if the deletion succeeded, orfalse
otherwise.- deleteProperty(arrayIndex)
- Parameters:
arrayIndex – int
- Return type:
bool
Deletes the value stored at
arrayIndex
from thisQJSManagedValue
. Returnstrue
if the deletion succeeded, orfalse
otherwise.Returns the
QJSEngine
thisQJSManagedValue
belongs to. Mind that the engine is always valid, unless theQJSManagedValue
is default-constructed or moved from. In the latter case a nullptr is returned.- equals(other)#
- Parameters:
other –
QJSManagedValue
- Return type:
bool
Invokes the JavaScript ‘==’ operator on this
QJSManagedValue
andother
, and returns the result.See also
- hasOwnProperty(name)#
- Parameters:
name – str
- Return type:
bool
Returns
true
if thisQJSManagedValue
has a propertyname
, otherwise returnsfalse
. The properties of the prototype chain are not considered.- hasOwnProperty(arrayIndex)
- Parameters:
arrayIndex – int
- Return type:
bool
Returns
true
if thisQJSManagedValue
has an array indexarrayIndex
, otherwise returnsfalse
. The properties of the prototype chain are not considered.- hasProperty(name)#
- Parameters:
name – str
- Return type:
bool
Returns
true
if thisQJSManagedValue
has a propertyname
, otherwise returnsfalse
. The properties of the prototype chain are considered.- hasProperty(arrayIndex)
- Parameters:
arrayIndex – int
- Return type:
bool
Returns
true
if thisQJSManagedValue
has an array indexarrayIndex
, otherwise returnsfalse
. The properties of the prototype chain are considered.- isArray()#
- Return type:
bool
Returns
true
if this value represents a JavaScript Array object, orfalse
otherwise.- isBoolean()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isboolean
, orfalse
otherwise.- isDate()#
- Return type:
bool
Returns
true
if this value represents a JavaScript Date object, orfalse
otherwise.- isError()#
- Return type:
bool
Returns
true
if this value represents a JavaScript Error object, orfalse
otherwise.- isFunction()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isfunction
,false
otherwise.- isInteger()#
- Return type:
bool
Returns
true
if thisQJSManagedValue
holds an integer value, orfalse
otherwise. The storage format of a number does not affect the result of any operations performed on it, but if an integer is stored, many operations are faster.- isJsMetaType()#
- Return type:
bool
- isNull()#
- Return type:
bool
Returns
true
if thisQJSManagedValue
holds the JavaScriptnull
value, orfalse
otherwise.- isNumber()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isnumber
, orfalse
otherwise.- isObject()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isobject
, orfalse
otherwise.- isQMetaObject()#
- Return type:
bool
Returns
true
if this value represents a QMetaObject pointer managed on the JavaScript heap, orfalse
otherwise.- isQObject()#
- Return type:
bool
Returns
true
if this value represents a QObject pointer managed on the JavaScript heap, orfalse
otherwise.- isRegularExpression()#
- Return type:
bool
Returns
true
if this value represents a JavaScript regular expression object, orfalse
otherwise.- isString()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isstring
, orfalse
otherwise.- isSymbol()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
issymbol
, orfalse
otherwise.- isUndefined()#
- Return type:
bool
Returns
true
if the type of thisQJSManagedValue
isundefined
, orfalse
otherwise.- isUrl()#
- Return type:
bool
Returns
true
if this value represents a JavaScript Url object, orfalse
otherwise.- isVariant()#
- Return type:
bool
Returns
true
if this value represents a QVariant managed on the JavaScript heap, orfalse
otherwise.- jsMetaInstantiate([values={}])#
- Parameters:
values – .list of QJSValue
- Return type:
- jsMetaMembers()#
- Return type:
list of strings
- jsMetaType()#
- Return type:
Returns the property
name
of thisQJSManagedValue
. The prototype chain is searched if the property is not found on the actual object.See also
- property(arrayIndex)
- Parameters:
arrayIndex – int
- Return type:
Returns the property stored at
arrayIndex
of thisQJSManagedValue
. The prototype chain is searched if the property is not found on the actual object.- prototype()#
- Return type:
Returns the prototype for this
QJSManagedValue
. This works on any value. You can, for example retrieve the JavaScriptboolean
prototype from aboolean
value.See also
Sets the property
name
tovalue
on thisQJSManagedValue
. This can only be done on JavaScript values of typeobject
. Furhermore,value
has to be either a primitive or belong to the same engine as this value.See also
- setProperty(arrayIndex, value)
- Parameters:
arrayIndex – int
value –
QJSValue
Stores the
value
atarrayIndex
in thisQJSManagedValue
. This can only be done on JavaScript values of typeobject
, and it’s not recommended if the value is not an array. Furhermore,value
has to be either a primitive or belong to the same engine as this value.- setPrototype(prototype)#
- Parameters:
prototype –
QJSManagedValue
Sets the prototype of this
QJSManagedValue
toprototype
. A precondition is thatprototype
belongs to the sameQJSEngine
as thisQJSManagedValue
and is an object (including null). Furthermore, thisQJSManagedValue
has to be an object (excluding null), too, and you cannot create prototype cycles.See also
- strictlyEquals(other)#
- Parameters:
other –
QJSManagedValue
- Return type:
bool
Invokes the JavaScript ‘===’ operator on this
QJSManagedValue
andother
, and returns the result.See also
- toBoolean()#
- Return type:
bool
Converts the manged value to a boolean. If the managed value holds a boolean, that one is returned. Otherwise a boolean coercion by JavaScript rules is performed.
If this
QJSManagedValue
holds a JavaScript Date object, returns an equivalent QDateTime. Otherwise returns an invalid one.- toInteger()#
- Return type:
int
Converts the manged value to an integer. This first converts the value to a number by the rules of
toNumber()
, and then clamps it into the integer range by the rules given for coercing the arguments to JavaScript bit shift operators into 32bit integers.Internally, the value may already be stored as an integer, in which case a fast path is taken.
Note
Conversion of a managed value to a number can throw an exception. In particular, symbols cannot be coerced into numbers, or a custom valueOf() method may throw. In this case the result is 0 and the engine carries an error after the conversion.
Note
The JavaScript rules for coercing numbers into 32bit integers are unintuitive.
Copies this
QJSManagedValue
into a newQJSValue
. This is less efficient than move-constructing aQJSValue
from aQJSManagedValue
, but retains theQJSManagedValue
.- toNumber()#
- Return type:
float
Converts the manged value to a number. If the managed value holds a number, that one is returned. Otherwise a number coercion by JavaScript rules is performed.
Note
Conversion of a managed value to a number can throw an exception. In particular, symbols cannot be coerced into numbers, or a custom valueOf() method may throw. In this case the result is 0 and the engine carries an error after the conversion.
- toPrimitive()#
- Return type:
Converts the manged value to a
QJSPrimitiveValue
. If the managed value holds a type supported byQJSPrimitiveValue
, the value is copied. Otherwise the value is converted to a string, and the string is stored inQJSPrimitiveValue
.Note
Conversion of a managed value to a string can throw an exception. In particular, symbols cannot be coerced into strings, or a custom
toString()
method may throw. In this case the result is the undefined value and the engine carries an error after the conversion.- toQMetaObject()#
- Return type:
If this
QJSManagedValue
holds a QMetaObject pointer, returns it. Otherwise returns nullptr.If this
QJSManagedValue
holds a QObject pointer, returns it. Otherwise returns nullptr.- toRegularExpression()#
- Return type:
If this
QJSManagedValue
holds a JavaScript regular expression object, returns an equivalent QRegularExpression. Otherwise returns an invalid one.- toString()#
- Return type:
str
Converts the manged value to a string. If the managed value holds a string, that one is returned. Otherwise a string coercion by JavaScript rules is performed.
Note
Conversion of a managed value to a string can throw an exception. In particular, symbols cannot be coerced into strings, or a custom toString() method may throw. In this case the result is an empty string and the engine carries an error after the conversion.
If this
QJSManagedValue
holds a JavaScript Url object, returns an equivalent QUrl. Otherwise returns an invalid one.- toVariant()#
- Return type:
object
Copies this
QJSManagedValue
into a new QVariant. This also creates a useful QVariant ifisVariant()
returns false. QVariant can hold all types supported byQJSManagedValue
.Returns the JavaScript type of this
QJSManagedValue
.