QJSManagedValue Class
QJSManagedValue representa un valor en el montón de JavaScript perteneciente a un QJSEngine. Más...
| Cabecera: | #include <QJSManagedValue> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml)target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| Desde: | Qt 6.1 |
Tipos Públicos
| enum | Type { Undefined, Boolean, Number, String, Object, …, Function } |
Funciones Públicas
| QJSManagedValue() | |
| QJSManagedValue(QJSValue value, QJSEngine *engine) | |
| QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine) | |
| QJSManagedValue(const QString &string, QJSEngine *engine) | |
| QJSManagedValue(const QVariant &variant, QJSEngine *engine) | |
| QJSManagedValue(QJSManagedValue &&other) | |
| ~QJSManagedValue() | |
| QJSValue | call(const QJSValueList &arguments = {}) const |
| QJSValue | callAsConstructor(const QJSValueList &arguments = {}) const |
| QJSValue | callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const |
| bool | deleteProperty(const QString &name) |
| bool | deleteProperty(quint32 arrayIndex) |
| QJSEngine * | engine() const |
| bool | equals(const QJSManagedValue &other) const |
| bool | hasOwnProperty(const QString &name) const |
| bool | hasOwnProperty(quint32 arrayIndex) const |
| bool | hasProperty(const QString &name) const |
| bool | hasProperty(quint32 arrayIndex) const |
| bool | isArray() const |
| bool | isBoolean() const |
| bool | isDate() const |
| bool | isError() const |
| bool | isFunction() const |
| bool | isInteger() const |
| bool | isNull() const |
| bool | isNumber() const |
| bool | isObject() const |
| bool | isQMetaObject() const |
| bool | isQObject() const |
| bool | isRegularExpression() const |
| bool | isString() const |
| bool | isSymbol() const |
| bool | isUndefined() const |
| bool | isUrl() const |
| bool | isVariant() const |
| QJSValue | property(const QString &name) const |
| QJSValue | property(quint32 arrayIndex) const |
| QJSManagedValue | prototype() const |
| void | setProperty(const QString &name, const QJSValue &value) |
| void | setProperty(quint32 arrayIndex, const QJSValue &value) |
| void | setPrototype(const QJSManagedValue &prototype) |
| bool | strictlyEquals(const QJSManagedValue &other) const |
| bool | toBoolean() const |
| QDateTime | toDateTime() const |
| int | toInteger() const |
| QJSValue | toJSValue() const |
| double | toNumber() const |
| QJSPrimitiveValue | toPrimitive() const |
| const QMetaObject * | toQMetaObject() const |
| QObject * | toQObject() const |
| QRegularExpression | toRegularExpression() const |
| QString | toString() const |
| QUrl | toUrl() const |
| QVariant | toVariant() const |
| QJSManagedValue::Type | type() const |
| QJSManagedValue & | operator=(QJSManagedValue &&other) |
Descripción Detallada
La clase QJSManagedValue permite interactuar con valores JavaScript en la mayoría de las formas en que se puede interactuar con ellos desde el propio JavaScript. Puedes obtener y establecer propiedades y prototipos, y puedes acceder a arrays. Además, puede transformar el valor en las contrapartidas Qt de los objetos JavaScript. Por ejemplo, un objeto Url puede transformarse en un QUrl.
Un QJSManagedValue siempre está vinculado a un QJSEngine concreto. No se puede utilizar de forma independiente. Esto significa que no puedes hacer que un QJSManagedValue de un motor sea una propiedad o un proptotipo de un QJSManagedValue de otro motor diferente.
En contraste con QJSValue, casi todos los valores mantenidos por QJSManagedValue viven en el heap de JavaScript. No hay almacenamiento inline o no gestionado. Por lo tanto, puedes obtener el prototipo de un valor primitivo, y puedes obtener la propiedad length de una cadena.
Sólo los QJSManagedValues construidos por defecto o movidos desde no mantienen un valor en el montón de JavaScript. Representan undefined, que no tiene propiedades ni prototipos.
También en contraste con QJSValue, QJSManagedValue no captura ninguna excepción JavaScript. Si una operación en un QJSManagedValue causa un error, generalmente devolverá un valor undefined y QJSEngine::hasError() devolverá true después. Puedes entonces atrapar la excepción usando QJSEngine::catchError(), o pasarla a la pila, a tu propia discreción.
Nota: Como la referencia al valor en la pila de JavaScript tiene que ser liberada en la destrucción, no puedes mover un QJSManagedValue a un hilo diferente. La destrucción tendría lugar en el nuevo subproceso, lo que crearía una condición de carrera con el recolector de basura en el subproceso original. Esto también significa que no puedes mantener un QJSManagedValue más allá de la vida útil de su motor.
La forma recomendada de trabajar con un QJSManagedValue es creándolo en la pila, posiblemente moviendo un QJSValue y añadiendo un motor, luego realizando las operaciones necesarias sobre él, y finalmente moviéndolo de nuevo a un QJSValue para su almacenamiento. Moverse entre QJSManagedValue y QJSValue es rápido.
Documentación de tipos de miembros
enum QJSManagedValue::Type
Este enum representa los tipos nativos de JavaScript, según lo especificado por ECMA-262.
| Constante | Valor | Descripción |
|---|---|---|
QJSManagedValue::Undefined | 0 | Tipo undefined |
QJSManagedValue::Boolean | 1 | Tipo boolean |
QJSManagedValue::Number | 2 | El tipo number |
QJSManagedValue::String | 3 | El tipo string |
QJSManagedValue::Object | 4 | Tipo object |
QJSManagedValue::Symbol | 5 | El tipo symbol |
QJSManagedValue::Function | 6 | El tipo function |
Tenga en cuenta que el valor null no es un tipo en sí mismo, sino una clase especial de objeto. Puede consultar un QJSManagedValue para esta condición utilizando el método isNull(). Además, JavaScript no tiene un tipo entero, pero conoce un tratamiento especial de los números en preparación para las operaciones con números enteros solamente. Puede consultar un QJSManagedValue para saber si contiene el resultado de dicho tratamiento utilizando el método isInteger().
Documentación de las funciones miembro
[constexpr noexcept] QJSManagedValue::QJSManagedValue()
Crea un QJSManagedValue que representa el valor de JavaScript undefined. Este es el único valor no almacenado en la pila de JavaScript. La llamada a engine() en un QJSManagedValue construido por defecto devolverá nullptr.
QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)
Crea un QJSManagedValue a partir de value, utilizando el heap de engine. Si value es a su vez managed y el motor al que pertenece no es engine, el resultado es un valor undefined, y se genera una advertencia.
QJSManagedValue::QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)
Crea un QJSManagedValue a partir de value utilizando el heap de engine.
QJSManagedValue::QJSManagedValue(const QString &string, QJSEngine *engine)
Crea un QJSManagedValue a partir de string utilizando el heap de engine.
QJSManagedValue::QJSManagedValue(const QVariant &variant, QJSEngine *engine)
Crea un QJSManagedValue a partir de variant utilizando el heap de engine.
QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)
Move-construye un QJSManagedValue a partir de other. Esto deja other en el estado por defecto-construido donde representa undefined y no pertenece a ningún motor.
[noexcept] QJSManagedValue::~QJSManagedValue()
Destruye la página QJSManagedValue.
Nota: Esto libera el espacio de memoria que ocupa en la pila de JavaScript. No debes destruir un QJSManagedValue desde un hilo distinto de aquel en el que vive el QJSEngine al que pertenece.
QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const
Si este QJSManagedValue representa un JavaScript FunctionObject, lo llama con el arguments dado , y devuelve el resultado. En caso contrario, devuelve un valor JavaScript undefined.
Los arguments tienen que ser valores primitivos o pertenecer al mismo QJSEngine que este QJSManagedValue. En caso contrario, la llamada no se realiza y se devuelve un valor JavaScript undefined.
QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const
Si este QJSManagedValue representa un JavaScript FunctionObject, lo llama como constructor con el arguments dado, y devuelve el resultado. En caso contrario devuelve un valor JavaScript undefined.
Los arguments tienen que ser valores primitivos o pertenecer al mismo QJSEngine que este QJSManagedValue. En caso contrario, la llamada no se realiza y se devuelve un valor JavaScript undefined.
QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
Si este QJSManagedValue representa un JavaScript FunctionObject, lo llama en instance con el arguments dado , y devuelve el resultado. En caso contrario devuelve un valor JavaScript undefined.
El arguments y el instance tienen que ser valores primitivos o pertenecer al mismo QJSEngine que este QJSManagedValue. En caso contrario, la llamada no se realiza y se devuelve un valor JavaScript undefined.
bool QJSManagedValue::deleteProperty(const QString &name)
Elimina la propiedad name de este QJSManagedValue. Devuelve true si la eliminación tuvo éxito, o false en caso contrario.
bool QJSManagedValue::deleteProperty(quint32 arrayIndex)
Elimina el valor almacenado en arrayIndex de este QJSManagedValue. Devuelve true si la eliminación tuvo éxito, o false en caso contrario.
QJSEngine *QJSManagedValue::engine() const
Devuelve el QJSEngine al que pertenece este QJSManagedValue. Tenga en cuenta que el motor siempre es válido, a menos que el QJSManagedValue se construya por defecto o se mueva de. En este último caso se devuelve un nullptr.
bool QJSManagedValue::equals(const QJSManagedValue &other) const
Invoca el operador '==' de JavaScript en este QJSManagedValue y other, y devuelve el resultado.
Véase también strictlyEquals.
bool QJSManagedValue::hasOwnProperty(const QString &name) const
Devuelve true si este QJSManagedValue tiene una propiedad name, en caso contrario devuelve false. Las propiedades de la cadena prototipo no se tienen en cuenta.
bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const
Devuelve true si este QJSManagedValue tiene un índice de matriz arrayIndex, en caso contrario devuelve false. No se tienen en cuenta las propiedades de la cadena prototipo.
bool QJSManagedValue::hasProperty(const QString &name) const
Devuelve true si este QJSManagedValue tiene una propiedad name, en caso contrario devuelve false. Se consideran las propiedades de la cadena prototipo.
bool QJSManagedValue::hasProperty(quint32 arrayIndex) const
Devuelve true si este QJSManagedValue tiene un índice de matriz arrayIndex, en caso contrario devuelve false. Se consideran las propiedades de la cadena prototipo.
bool QJSManagedValue::isArray() const
Devuelve true si este valor representa un objeto Array de JavaScript, o false en caso contrario.
bool QJSManagedValue::isBoolean() const
Devuelve true si el tipo de este QJSManagedValue es boolean, o false en caso contrario.
bool QJSManagedValue::isDate() const
Devuelve true si este valor representa un objeto Date de JavaScript, o false en caso contrario.
bool QJSManagedValue::isError() const
Devuelve true si este valor representa un objeto Error de JavaScript, o false en caso contrario.
bool QJSManagedValue::isFunction() const
Devuelve true si el tipo de este QJSManagedValue es function, false en caso contrario.
bool QJSManagedValue::isInteger() const
Devuelve true si este QJSManagedValue contiene un valor entero, o false en caso contrario. El formato de almacenamiento de un número no afecta al resultado de ninguna operación realizada sobre él, pero si se almacena un número entero, muchas operaciones son más rápidas.
bool QJSManagedValue::isNull() const
Devuelve true si este QJSManagedValue contiene el valor JavaScript null, o false en caso contrario.
bool QJSManagedValue::isNumber() const
Devuelve true si el tipo de este QJSManagedValue es number, o false en caso contrario.
bool QJSManagedValue::isObject() const
Devuelve true si el tipo de este QJSManagedValue es object, o false en caso contrario.
bool QJSManagedValue::isQMetaObject() const
Devuelve true si este valor representa un puntero QMetaObject gestionado en el montón de JavaScript, o false en caso contrario.
bool QJSManagedValue::isQObject() const
Devuelve true si este valor representa un puntero QObject gestionado en el montón de JavaScript, o false en caso contrario.
bool QJSManagedValue::isRegularExpression() const
Devuelve true si este valor representa un objeto de expresión regular JavaScript, o false en caso contrario.
bool QJSManagedValue::isString() const
Devuelve true si el tipo de este QJSManagedValue es string, o false en caso contrario.
bool QJSManagedValue::isSymbol() const
Devuelve true si el tipo de este QJSManagedValue es symbol, o false en caso contrario.
bool QJSManagedValue::isUndefined() const
Devuelve true si el tipo de este QJSManagedValue es undefined, o false en caso contrario.
bool QJSManagedValue::isUrl() const
Devuelve true si este valor representa un objeto Url de JavaScript, o false en caso contrario.
bool QJSManagedValue::isVariant() const
Devuelve true si este valor representa un QVariant gestionado en el montón de JavaScript, o false en caso contrario.
QJSValue QJSManagedValue::property(const QString &name) const
Devuelve la propiedad name de este QJSManagedValue. Se busca en la cadena de prototipos si la propiedad no se encuentra en el objeto real.
Véase también setProperty().
QJSValue QJSManagedValue::property(quint32 arrayIndex) const
Devuelve la propiedad almacenada en arrayIndex de este QJSManagedValue. Se busca en la cadena de prototipos si la propiedad no se encuentra en el objeto real.
QJSManagedValue QJSManagedValue::prototype() const
Devuelve el prototipo de este QJSManagedValue. Esto funciona con cualquier valor. Puede, por ejemplo, recuperar el prototipo JavaScript boolean de un valor boolean.
Véase también setPrototype().
void QJSManagedValue::setProperty(const QString &name, const QJSValue &value)
Establece la propiedad name a value en este QJSManagedValue. Esto sólo puede hacerse en valores JavaScript de tipo object. Además, value tiene que ser una primitiva o pertenecer al mismo motor que este valor.
Véase también property().
void QJSManagedValue::setProperty(quint32 arrayIndex, const QJSValue &value)
Almacena el value en arrayIndex en este QJSManagedValue. Esto sólo puede hacerse en valores JavaScript de tipo object, y no es recomendable si el valor no es un array. Además, value tiene que ser una primitiva o pertenecer al mismo motor que este valor.
void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)
Establece el prototipo de este QJSManagedValue en prototype. Una condición previa es que prototype pertenezca al mismo QJSEngine que este QJSManagedValue y sea un objeto (incluyendo null). Además, este QJSManagedValue también tiene que ser un objeto (excluyendo null), y no se pueden crear ciclos de prototipos.
Véase también prototype().
bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const
Invoca el operador '===' de JavaScript en este QJSManagedValue y other, y devuelve el resultado.
Véase también equals.
bool QJSManagedValue::toBoolean() const
Convierte el valor gestionado en un booleano. Si el valor gestionado contiene un booleano, éste se devuelve. En caso contrario, se realiza una coerción booleana según las reglas de JavaScript.
QDateTime QJSManagedValue::toDateTime() const
Si este QJSManagedValue contiene un objeto Date de JavaScript, devuelve un QDateTime equivalente. En caso contrario devuelve uno inválido.
int QJSManagedValue::toInteger() const
Convierte el valor manejado en un entero. En primer lugar, convierte el valor en un número según las reglas de toNumber() y, a continuación, lo fija en el rango de los enteros según las reglas dadas para convertir los argumentos de los operadores de desplazamiento de bits de JavaScript en enteros de 32 bits.
Internamente, el valor puede estar ya almacenado como un entero, en cuyo caso se toma un camino rápido.
Nota: La conversión de un valor gestionado a un número puede lanzar una excepción. En particular, los símbolos no pueden ser convertidos en números, o un método personalizado valueOf() puede lanzar. En este caso el resultado es 0 y el motor lleva un error después de la conversión.
Nota: Las reglas de JavaScript para convertir números en enteros de 32 bits son poco intuitivas.
QJSValue QJSManagedValue::toJSValue() const
Copia este QJSManagedValue en un nuevo QJSValue. Esto es menos eficiente que mover-construir un QJSValue a partir de un QJSManagedValue, pero conserva el QJSManagedValue.
double QJSManagedValue::toNumber() const
Convierte el valor gestionado en un número. Si el valor gestionado contiene un número, éste se devuelve. En caso contrario, se realiza una coerción numérica según las reglas de JavaScript.
Nota: La conversión de un valor gestionado a un número puede lanzar una excepción. En particular, los símbolos no pueden ser coercionados en números, o un método personalizado valueOf() puede lanzar. En este caso, el resultado es 0 y el motor transmite un error tras la conversión.
QJSPrimitiveValue QJSManagedValue::toPrimitive() const
Convierte el valor gestionado en un QJSPrimitiveValue. Si el valor gestionado es de un tipo admitido por QJSPrimitiveValue, el valor se copia. De lo contrario, el valor se convierte en una cadena y la cadena se almacena en QJSPrimitiveValue.
Nota: La conversión de un valor gestionado a una cadena puede lanzar una excepción. En particular, los símbolos no pueden ser coaccionados en cadenas, o un método personalizado toString() puede lanzar. En este caso el resultado es el valor indefinido y el motor lleva un error después de la conversión.
const QMetaObject *QJSManagedValue::toQMetaObject() const
Si este QJSManagedValue contiene un puntero QMetaObject, lo devuelve. Si no, devuelve nullptr.
QObject *QJSManagedValue::toQObject() const
Si este QJSManagedValue contiene un puntero QObject, lo devuelve. Si no, devuelve nullptr.
QRegularExpression QJSManagedValue::toRegularExpression() const
Si este QJSManagedValue contiene un objeto de expresión regular JavaScript, devuelve un QRegularExpression equivalente. En caso contrario devuelve uno inválido.
QString QJSManagedValue::toString() const
Convierte el valor gestionado en una cadena. Si el valor gestionado contiene una cadena, ésta se devuelve. En caso contrario, se realiza una coerción de cadena según las reglas de JavaScript.
Nota: La conversión de un valor gestionado a una cadena puede lanzar una excepción. En particular, los símbolos no pueden ser coercionados en cadenas, o un método personalizado toString() puede lanzar. En este caso, el resultado es una cadena vacía y el motor transmite un error tras la conversión.
QUrl QJSManagedValue::toUrl() const
Si este QJSManagedValue contiene un objeto Url de JavaScript, devuelve un QUrl equivalente. En caso contrario devuelve uno inválido.
QVariant QJSManagedValue::toVariant() const
Copia este QJSManagedValue en un nuevo QVariant. Esto también crea un QVariant útil si QJSManagedValue::isVariant() devuelve false. QVariant puede contener todos los tipos soportados por QJSManagedValue.
QJSManagedValue::Type QJSManagedValue::type() const
Devuelve el tipo JavaScript de este QJSManagedValue.
QJSManagedValue &QJSManagedValue::operator=(QJSManagedValue &&other)
Mueve-asigna un QJSManagedValue desde other. Esto deja other en el estado por defecto-construido donde representa undefined y no pertenece a ningún motor.
Nota: Esto libera el espacio de memoria que este QJSManagedValue ocupa en el montón de JavaScript. No debes mover-asignar un QJSManagedValue en un hilo diferente al que vive el QJSEngine al que pertenece.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.