QJSManagedValue 类

QJSManagedValue 代表属于 QJSEngine 的 JavaScript 堆上的一个值。 更多信息...

头文件 #include <QJSManagedValue>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
Qt 6.1

公共类型

枚举类型 { 未定义,布尔值,数字,字符串,对象,……,函数 }

公共函数

QJSManagedValue()
QJSManagedValue(QJSValue value, QJSEngine *engine)
QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)
QJSManagedValue(const QVariant &variant, QJSEngine *engine)
QJSManagedValue(const QString &string, QJSEngine *engine)
QJSManagedValue(QJSManagedValue &&other)
~QJSManagedValue()
QJSValuecall(const QJSValueList &arguments = {}) const
QJSValuecallAsConstructor(const QJSValueList &arguments = {}) const
QJSValuecallWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
booldeleteProperty(const QString &name)
booldeleteProperty(quint32 arrayIndex)
QJSEngine *engine() const
boolequals(const QJSManagedValue &other) const
boolhasOwnProperty(const QString &name) const
boolhasOwnProperty(quint32 arrayIndex) const
boolhasProperty(const QString &name) const
boolhasProperty(quint32 arrayIndex) const
boolisArray() const
boolisBoolean() const
boolisDate() const
boolisError() const
boolisFunction() const
boolisInteger() const
boolisNull() const
boolisNumber() const
boolisObject() const
boolisQMetaObject() const
boolisQObject() const
boolisRegularExpression() const
boolisString() const
boolisSymbol() const
boolisUndefined() const
boolisUrl() const
boolisVariant() const
QJSValueproperty(const QString &name) const
QJSValueproperty(quint32 arrayIndex) const
QJSManagedValueprototype() const
voidsetProperty(const QString &name, const QJSValue &value)
voidsetProperty(quint32 arrayIndex, const QJSValue &value)
voidsetPrototype(const QJSManagedValue &prototype)
boolstrictlyEquals(const QJSManagedValue &other) const
booltoBoolean() const
QDateTimetoDateTime() const
inttoInteger() const
QJSValuetoJSValue() const
doubletoNumber() const
QJSPrimitiveValuetoPrimitive() const
const QMetaObject *toQMetaObject() const
QObject *toQObject() const
QRegularExpressiontoRegularExpression() const
QStringtoString() const
QUrltoUrl() const
QVarianttoVariant() const
QJSManagedValue::Typetype() const
QJSManagedValue &operator=(QJSManagedValue &&other)

详细描述

QJSManagedValue类允许以大多数从JavaScript本身可以交互的方式与JavaScript值进行交互。您可以获取和设置属性和原型,并且可以访问数组。此外,您还可以将值转换为JavaScript对象的Qt等价物。例如,可以将Url对象转换为QUrl

QJSManagedValue始终绑定到特定的QJSEngine。您不能单独使用。这意味着您不能将来自一个引擎的QJSManagedValue作为来自不同引擎的QJSManagedValue的属性或原型。

QJSValue相比,几乎所有的QJSManagedValue持有的值都存在于JavaScript堆上。没有内联或未托管存储。因此,您可以获取原始值的原型,也可以获取字符串的length属性。

只有默认构造或移动的QJSManagedValues不持有JavaScript堆上的值。它们代表undefined,没有任何属性或原型。

QJSValue相比,QJSManagedValue不会捕获任何JavaScript异常。如果对QJSManagedValue的操作导致错误,它通常会返回一个undefined值,并且QJSEngine::hasError()会在之后返回true。然后您可以使用QJSEngine::catchError()来捕获异常,或者根据您的判断将其传递到堆栈中。

注意:由于JavaScript堆上的值的引用必须在销毁时释放,因此你不能将一个QJSManagedValue移动到不同的线程。销毁将在新线程中进行,这将与原始线程上的垃圾回收器产生竞态条件。这也意味着你不能超出其引擎的生命周期来持有QJSManagedValue。

处理QJSManagedValue的推荐方法是将其在堆栈上创建,可能通过移动一个QJSValue并添加一个引擎,然后在上面执行必要的操作,最后将其移动回用于存储的QJSValue。在QJSManagedValue和QJSValue之间移动既快速又简单。

成员类型文档

枚举 QJSManagedValue::Type

此枚举表示JavaScript原生类型,如ECMA-262中指定。

常量描述
QJSManagedValue::Undefined0undefined类型
QJSManagedValue::Boolean1boolean类型
QJSManagedValue::Number2number类型
QJSManagedValue::String3string类型
QJSManagedValue::Object4object类型
QJSManagedValue::Symbol5symbol类型
QJSManagedValue::Function6function类型

注意,null值并不是它自己的类型,而是一种特殊类型的对象。你可以使用QJSManagedValueisNull()方法查询该条件。此外,JavaScript没有整数类型,但它在准备仅对整数进行操作时,会使用对数字的特殊处理。你可以使用QJSManagedValueisInteger()方法来查询它是否包含这种处理的输出。

成员函数文档

[constexpr noexcept] QJSManagedValue::QJSManagedValue()

创建一个表示JavaScript undefined值的QJSManagedValue。这是唯一不在JavaScript堆上存储的值。在默认构造的QJSManagedValue上调用engine()将返回nullptr。

QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)

value创建一个QJSManagedValue,使用engine的堆。如果value本身被管理,且它所属的引擎不是engine,则结果是undefined值,并生成一个警告。

QJSManagedValue::QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)

使用engine的堆从value创建一个QJSManagedValue。

QJSManagedValue::QJSManagedValue(const QVariant &variant, QJSEngine *engine)

使用engine的堆从variant创建一个QJSManagedValue。

QJSManagedValue::QJSManagedValue(const QString &string, QJSEngine *engine)

使用引擎堆从字符串创建一个QJSManagedValue。

QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)

其他移动构造QJSManagedValue。这将其他留在默认构造状态,其中它表示未定义的值,且不属于任何引擎。

[noexcept] QJSManagedValue::~QJSManagedValue()

销毁QJSManagedValue。

注意:这会释放它所持有的JavaScript堆上的内存槽。你不能从不属于QJSEngine的线程的线程销毁QJSManagedValue

QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const

如果这个QJSManagedValue表示一个JavaScript FunctionObject,则使用给定的参数调用它并返回结果。否则返回JavaScript undefined值。

参数必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined值。

QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const

如果这个QJSManagedValue表示一个JavaScript FunctionObject,则以给定的参数调用它作为构造函数并返回结果。否则返回JavaScript undefined值。

参数必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined值。

QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const

如果这个QJSManagedValue表示一个JavaScript FunctionObject,则在实例上使用给定的参数调用它并返回结果。否则返回JavaScript undefined值。

参数实例必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined值。

bool QJSManagedValue::deleteProperty(const QString &name)

QJSManagedValue中删除名称的属性。如果删除成功返回true,否则返回false

bool QJSManagedValue::deleteProperty(quint32 arrayIndex)

QJSManagedValue中删除arrayIndex处存储的值。如果删除成功返回true,否则返回false

QJSEngine *QJSManagedValue::engine() const

返回此 QJSEngine 对应的 QJSManagedValue。请注意,除非 QJSManagedValue 是使用默认构造函数构造的或被移动,否则引擎始终有效。在后一种情况下,将返回 nullptr。

bool QJSManagedValue::equals(const QJSManagedValue &other) const

在此 QJSManagedValueother 上调用 JavaScript 的 '==' 算子,并返回结果。

另请参阅strictlyEquals.

bool QJSManagedValue::hasOwnProperty(const QString &name) const

如果此 QJSManagedValue 有一个属性 name,则返回 true,否则返回 false。不考虑原型链上的属性。

bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const

如果此 QJSManagedValue 有一个索引 arrayIndex,则返回 true,否则返回 false。不考虑原型链上的属性。

bool QJSManagedValue::hasProperty(const QString &name) const

如果此 QJSManagedValue 有一个属性 name,则返回 true,否则返回 false。考虑原型链上的属性。

bool QJSManagedValue::hasProperty(quint32 arrayIndex) const

如果此 QJSManagedValue 有一个索引 arrayIndex,则返回 true,否则返回 false。考虑原型链上的属性。

bool QJSManagedValue::isArray() const

如果此值代表一个 JavaScript 数组对象,则返回 true,否则返回 false

bool QJSManagedValue::isBoolean() const

如果此 QJSManagedValue 的类型是 boolean,则返回 true,否则返回 false

bool QJSManagedValue::isDate() const

如果此值代表一个 JavaScript 日期对象,则返回 true,否则返回 false

bool QJSManagedValue::isError() const

如果此值代表一个 JavaScript 错误对象,则返回 true,否则返回 false

bool QJSManagedValue::isFunction() const

如果此 QJSManagedValue 的类型是 function,则返回 true;否则返回 false

bool QJSManagedValue::isInteger() const

如果此 QJSManagedValue 包含一个整数值,则返回 true;否则返回 false。数字的存储格式不会影响其上的任何操作的结果,但如果存储的是整数,则许多操作将更快。

bool QJSManagedValue::isNull() const

如果此 QJSManagedValue 包含 JavaScript 的 null 值,则返回 true;否则返回 false

bool QJSManagedValue::isNumber() const

如果此 QJSManagedValue 的类型是 number,则返回 true;否则返回 false

bool QJSManagedValue::isObject() const

如果此 QJSManagedValue 的类型是 object,则返回 true;否则返回 false

bool QJSManagedValue::isQMetaObject() const

如果此值表示一个在 JavaScript 堆上管理的 QMetaObject 指针,则返回 true;否则返回 false

bool QJSManagedValue::isQObject() const

如果此值表示一个在 JavaScript 堆上管理的 QObject 指针,则返回 true;否则返回 false

bool QJSManagedValue::isRegularExpression() const

如果此值表示一个 JavaScript 正则表达式对象,则返回 true;否则返回 false

bool QJSManagedValue::isString() const

如果此 QJSManagedValue 的类型是 string,则返回 true;否则返回 false

bool QJSManagedValue::isSymbol() const

如果此 QJSManagedValue 的类型是 symbol,则返回 true;否则返回 false

bool QJSManagedValue::isUndefined() const

如果此 QJSManagedValue 的类型是 undefined,则返回 true;否则返回 false

bool QJSManagedValue::isUrl() const

如果此值表示一个 JavaScript Url 对象,则返回 true;否则返回 false

bool QJSManagedValue::isVariant() const

如果此值表示一个在 JavaScript 堆上管理的 QVariant,则返回 true;否则返回 false

QJSValue QJSManagedValue::property(const QString &name) const

返回此 QJSManagedValuename 属性。如果在实际对象上找不到属性,则将搜索原型链。

另见 setProperty

QJSValue QJSManagedValue::property(quint32 arrayIndex) const

返回此 QJSManagedValue 中存储在 arrayIndex 的属性。如果在实际对象上找不到属性,则将搜索原型链。

QJSManagedValue QJSManagedValue::prototype() const

返回此 QJSManagedValue 的原型。这适用于任何值。例如,您可以从一个 boolean 值检索到 JavaScript boolean 原型。

另见 setPrototype

void QJSManagedValue::setProperty(const QString &name, const QJSValue &value)

QJSManagedValue 上设置 name 属性为 value。这只能在 object 类型的 JavaScript 值上执行。此外,value 必须是原始值或与此值属于同一引擎。

另见 property

void QJSManagedValue::setProperty(quint32 arrayIndex, const QJSValue &value)

在此 QJSManagedValue 中将 value 存储在 arrayIndex。这只能在 object 类型的 JavaScript 值上执行,并且如果不的是数组,则不建议这样做。此外,value 必须是原始值或与此值属于同一引擎。

void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)

将此 QJSManagedValue 的原型设置为 prototype。前提是 prototype 必须属于与 QJSManagedValue 相同的 QJSEngine,并且是一个对象(包括 null)。此外,这个 QJSManagedValue 也必须是一个对象(不包括 null),并且您不能创建原型循环。

另见 prototype

bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const

QJSManagedValueother 上调用 JavaScript '===' 运算符,并返回结果。

另见 equals

bool QJSManagedValue::toBoolean() const

将管理的值转换为布尔值。如果管理的值包含布尔值,则返回该值。否则,将按照 JavaScript 规则执行布尔转换。

QDateTime QJSManagedValue::toDateTime() const

如果这个 QJSManagedValue 包含一个 JavaScript 日期对象,则返回一个等效的 QDateTime。否则返回一个无效的实例。

int QJSManagedValue::toInteger() const

将托管值转换为整数。这首先通过 toNumber() 的规则将值转换为数字,然后根据规则将该参数强制转换为 JavaScript 位运算符的 32 位整数。

在内部,值可能已经存储为整数,这种情况下会采用快速路径。

注意:将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是 0,并且在转换后引擎携带一个错误。

注意:JavaScript 将数字强制转换为 32 位整数的规则不直观。

QJSValue QJSManagedValue::toJSValue() const

将此 QJSManagedValue 复制到新的 QJSValue。这比从 QJSManagedValue 移动构建一个 QJSValue 效率低,但保留了 QJSManagedValue

double QJSManagedValue::toNumber() const

将托管值转换为数字。如果托管值包含一个数字,则返回该数字。否则执行 JavaScript 规则的数字强制转换。

注意:将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是 0,并且在转换后引擎携带一个错误。

QJSPrimitiveValue QJSManagedValue::toPrimitive() const

将托管值转换为 QJSPrimitiveValue。如果托管值包含 QJSPrimitiveValue 支持的类型,则复制该值。否则将值转换为字符串,并将该字符串存储在 QJSPrimitiveValue 中。

注意:将托管值转换为字符串可能会抛出异常。特别是,符号不能被强制转换为字符串,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是未定义值,并且在转换后引擎携带一个错误。

const QMetaObject *QJSManagedValue::toQMetaObject() const

如果这个 QJSManagedValue 包含一个 QMetaObject 指针,则返回它。否则返回 nullptr。

QObject *QJSManagedValue::toQObject() const

如果这个 QJSManagedValue 包含一个 QObject 指针,则返回它。否则返回 nullptr。

QRegularExpression QJSManagedValue::toRegularExpression() const

如果这个 QJSManagedValue 包含一个 JavaScript 正则表达式对象,则返回一个等效的 QRegularExpression。否则返回一个无效的实例。

QString QJSManagedValue::toString() const

将托管值转换为字符串。如果托管值包含一个字符串,则返回该字符串。否则执行 JavaScript 规则的字符串强制转换。

注意:将管理值转换为字符串可能会抛出异常。特别是,不能将符号强制转换为字符串,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是一个空字符串,并且引擎在转换后会有错误。

QUrl QJSManagedValue::toUrl() const

如果这个 QJSManagedValue 包含一个 JavaScript Url 对象,则返回一个等效的 QUrl。否则返回一个无效的。

QVariant QJSManagedValue::toVariant() const

将这个 QJSManagedValue 拷贝到一个新的 QVariant。如果 QJSManagedValue::isVariant() 返回 false,这也创建了一个有用的 QVariant。QVariant 可以包含 QJSManagedValue 所支持的任何类型。

QJSManagedValue::Type QJSManagedValue::type() const

返回这个 QJSManagedValue 的 JavaScript 类型。

QJSManagedValue &QJSManagedValue::operator=(QJSManagedValue &&other)

other 移动赋值一个 QJSManagedValue。这会使 other 处于默认构造状态,表示未定义,并且不属于任何引擎。

注意:这会释放这个 QJSManagedValue 在 JavaScript 堆上持有的内存槽位。你不得在不同线程上移动赋值一个 QJSManagedValue,而该 QJSEngine 位于相同的线程。

© 2024 Qt 公司。本文件中包含的文档贡献是各自所有者的版权。本文件提供的内容在 GNU 自由文档许可协议 1.3 版 的条款下获得许可,由自由软件基金会发布。Qt 以及相应的徽标是芬兰的 Qt 公司,以及其他全球国家/地区的 商标。所有其他商标属于其各自所有者。