PySide6.QtQml.QJSManagedValue

class QJSManagedValue

QJSManagedValue 表示属于 QJSEngine 的 JavaScript 堆上的一个值。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

QJSManagedValue 类允许以大多数方式与 JavaScript 值进行交互,就像你可以在 JavaScript 本身中与它们交互一样。你可以获取和设置属性和原型,并且可以访问数组。此外,你可以将值转换为 JavaScript 对象的 Qt 对应物。例如,一个 Url 对象可以转换为 QUrl。

一个 QJSManagedValue 总是绑定到一个特定的 QJSEngine。你不能独立使用它。这意味着你不能将一个引擎中的 QJSManagedValue 作为另一个引擎中的 QJSManagedValue 的属性或原型。

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

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

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

注意

由于在销毁时必须释放对JavaScript堆上值的引用,因此不能将QJSManagedValue移动到不同的线程。销毁将在新线程中进行,这将与原始线程上的垃圾收集器产生竞争条件。这也意味着你不能在引擎的生命周期之外持有QJSManagedValue

推荐的使用QJSManagedValue的方式是在栈上创建它,可能是通过移动一个QJSValue并添加一个引擎,然后在其上执行必要的操作,最后将其移回QJSValue进行存储。在QJSManagedValueQJSValue之间移动是快速的。

class Type

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

常量

描述

QJSManagedValue.Undefined

undefined 类型

QJSManagedValue.Boolean

boolean 类型

QJSManagedValue.Number

number 类型

QJSManagedValue.String

string 类型

QJSManagedValue.Object

object 类型

QJSManagedValue.Symbol

symbol 类型

QJSManagedValue.Function

function 类型

请注意,null 值本身不是一种类型,而是一种特殊的对象。您可以使用 isNull() 方法来查询 QJSManagedValue 是否处于这种状态。此外,JavaScript 没有整数类型,但它对数字有特殊处理,以准备仅用于整数的操作。您可以使用 isInteger() 方法来查询 QJSManagedValue 是否持有这种处理的结果。

__init__()

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

__init__(value, engine)
Parameters:

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

__init__(value, engine)
Parameters:

value使用engine的堆创建一个QJSManagedValue

__init__(string, engine)
Parameters:

string使用engine的堆创建一个QJSManagedValue

__init__(variant, engine)
Parameters:

variant使用engine的堆创建一个QJSManagedValue

call([arguments={}])
Parameters:

arguments – QJSValue 的列表

Return type:

QJSValue

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

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

callAsConstructor([arguments={}])
Parameters:

arguments – QJSValue 的列表

Return type:

QJSValue

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

arguments 必须是原始值或与此 QJSManagedValue 属于同一个 QJSEngine。否则,调用不会执行,并且会返回一个 JavaScript undefined 值。

callWithInstance(instance[, arguments={}])
Parameters:
  • 实例QJSValue

  • arguments – QJSValue 的列表

Return type:

QJSValue

如果这个QJSManagedValue代表一个JavaScript FunctionObject,则在instance上使用给定的arguments调用它,并返回结果。否则返回一个JavaScript undefined值。

argumentsinstance 必须是原始值或与此 QJSManagedValue 属于同一个 QJSEngine。否则,调用不会执行,并返回一个 JavaScript undefined 值。

deleteProperty(name)
Parameters:

name – str

Return type:

布尔

从此QJSManagedValue中删除属性name。如果删除成功,则返回true,否则返回false

deleteProperty(arrayIndex)
Parameters:

arrayIndex – 整数

Return type:

布尔

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

engine()
Return type:

QJSEngine

返回此QJSManagedValue所属的QJSEngine。请注意,除非QJSManagedValue是默认构造的或从其他地方移动过来的,否则引擎始终有效。在后一种情况下,将返回nullptr。

equals(other)
Parameters:

其他QJSManagedValue

Return type:

布尔

在此QJSManagedValueother上调用JavaScript的‘==’运算符,并返回结果。

另请参阅

strictlyEquals

hasOwnProperty(name)
Parameters:

name – str

Return type:

布尔

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

hasOwnProperty(arrayIndex)
Parameters:

arrayIndex – 整数

Return type:

布尔

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

hasProperty(name)
Parameters:

name – str

Return type:

布尔

如果此QJSManagedValue具有属性name,则返回true,否则返回false。原型链的属性也会被考虑。

hasProperty(arrayIndex)
Parameters:

arrayIndex – 整数

Return type:

布尔

如果此QJSManagedValue具有数组索引arrayIndex,则返回true,否则返回false。原型链的属性会被考虑。

isArray()
Return type:

布尔

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

isBoolean()
Return type:

布尔

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

isDate()
Return type:

布尔

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

isError()
Return type:

布尔

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

isFunction()
Return type:

布尔

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

isInteger()
Return type:

布尔

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

isJsMetaType()
Return type:

布尔

isNull()
Return type:

布尔

如果这个QJSManagedValue持有JavaScript的null值,则返回true,否则返回false

isNumber()
Return type:

布尔

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

isObject()
Return type:

布尔

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

isQMetaObject()
Return type:

布尔

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

isQObject()
Return type:

布尔

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

isRegularExpression()
Return type:

布尔

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

isString()
Return type:

布尔

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

isSymbol()
Return type:

布尔

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

isUndefined()
Return type:

布尔

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

isUrl()
Return type:

布尔

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

isVariant()
Return type:

布尔

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

jsMetaInstantiate([values={}])
Parameters:

values – QJSValue 的列表

Return type:

QJSManagedValue

jsMetaMembers()
Return type:

字符串列表

jsMetaType()
Return type:

QJSManagedValue

property(name)
Parameters:

name – str

Return type:

QJSValue

返回此QJSManagedValue的属性name。如果实际对象上未找到该属性,则会搜索原型链。

另请参阅

setProperty()

property(arrayIndex)
Parameters:

arrayIndex – 整数

Return type:

QJSValue

返回存储在此QJSManagedValuearrayIndex处的属性。如果在实际对象上未找到该属性,则会搜索原型链。

prototype()
Return type:

QJSManagedValue

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

另请参阅

setPrototype()

setProperty(name, value)
Parameters:

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

另请参阅

property()

setProperty(arrayIndex, value)
Parameters:

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

setPrototype(prototype)
Parameters:

原型QJSManagedValue

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

另请参阅

prototype()

strictlyEquals(other)
Parameters:

其他QJSManagedValue

Return type:

布尔

在此QJSManagedValueother上调用JavaScript的‘===’操作符,并返回结果。

另请参阅

equals

toBoolean()
Return type:

布尔

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

toDateTime()
Return type:

QDateTime

如果这个 QJSManagedValue 持有一个 JavaScript 日期对象,则返回一个等效的 QDateTime。否则返回一个无效的。

toInteger()
Return type:

整数

将管理值转换为整数。首先根据toNumber()的规则将值转换为数字,然后根据将参数强制转换为JavaScript位移动运算符的32位整数的规则将其限制在整数范围内。

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

注意

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

注意

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

toJSValue()
Return type:

QJSValue

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

toNumber()
Return type:

浮点数

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

注意

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

toPrimitive()
Return type:

QJSPrimitiveValue

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

注意

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

toQMetaObject()
Return type:

QMetaObject

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

toQObject()
Return type:

QObject

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

toRegularExpression()
Return type:

QRegularExpression

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

toString()
Return type:

字符串

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

注意

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

toUrl()
Return type:

QUrl

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

toVariant()
Return type:

对象

将此QJSManagedValue复制到一个新的QVariant中。如果isVariant()返回false,这也会创建一个有用的QVariant。QVariant可以持有QJSManagedValue支持的所有类型。

type()
Return type:

类型

返回此 QJSManagedValue 的 JavaScript 类型。