QJSManagedValue Class

QJSManagedValue は、QJSEngine に属する JavaScript ヒープ上の値を表します。 ... 詳細

Header: #include <QJSManagedValue>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Since: Qt 6.1

パブリック型

enum Type { Undefined, Boolean, Number, String, Object, …, Function }

パブリック関数

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)

詳細説明

QJSManagedValue クラスは、JavaScript 自体から対話できるほとんどの方法で、JavaScript の値との対話を可能にします。プロパティやプロトタイプの取得と設定、配列へのアクセスが可能です。さらに、値を JavaScript オブジェクトの Qt 対応物に変換することもできます。例えば、UrlオブジェクトはQUrl に変換できます。

QJSManagedValueは、常に特定のQJSEngine 。独立して使用することはできません。つまり、あるエンジンのQJSManagedValueを、別のエンジンのQJSManagedValueのプロパティやプロトタイプにすることはできません。

QJSValue とは対照的に、QJSManagedValueによって保持されるほとんどすべての値は、JavaScriptヒープ上に存在します。インラインストレージやアンマネージドストレージはありません。したがって、プリミティブ値のプロトタイプを取得したり、文字列のlength プロパティを取得することができます。

QJSManagedValue は、JavaScript ヒープ上に値を保持しません。これらは、プロパティやプロトタイプを持たないundefined を表します。

また、QJSValue とは対照的に、QJSManagedValue は JavaScript の例外をキャッチしません。QJSManagedValue に対する操作でエラーが発生した場合、一般的にundefined が返され、QJSEngine::hasError() はその後にtrue を返します。その後、QJSEngine::catchError ()を使用して例外をキャッチするか、独自の判断でスタックに渡すことができます。

注意: JavaScriptヒープ上の値への参照は破棄時に解放されなければならないので、QJSManagedValueを別のスレッドに移動することはできません。破棄は新しいスレッドで行われるため、元のスレッドのガベージコレクタと競合状態が発生します。これは、エンジンの寿命を超えてQJSManagedValueを保持できないことも意味します。

推奨されるQJSManagedValueの操作方法は、スタック上にQJSManagedValueを作成し、QJSValue 、エンジンを追加し、必要な操作を行い、最後にQJSValue 、格納することです。QJSManagedValueとQJSValue 間の移動は高速である。

メンバ型ドキュメント

enum QJSManagedValue::Type

この列挙型は、ECMA-262で指定されているJavaScriptのネイティブ型を表します。

定数説明
QJSManagedValue::Undefined0undefined
QJSManagedValue::Boolean1boolean
QJSManagedValue::Number2number
QJSManagedValue::String3string タイプ
QJSManagedValue::Object4object タイプ
QJSManagedValue::Symbol5symbol タイプ
QJSManagedValue::Function6function タイプ

null の値はそれ自体の型ではなく、特別な種類のオブジェクトであることに注意してください。isNull() メソッドを使えば、この条件に対してQJSManagedValue を問い合わせることができる。さらに、JavaScriptには整数型はありませんが、整数のみの演算に備え、数値の特別な扱いを知っています。isInteger() メソッドを使うことで、QJSManagedValue にそのような処理の結果を保持しているかどうかを問い合わせることができる。

メンバ関数ドキュメント

[constexpr noexcept] QJSManagedValue::QJSManagedValue()

JavaScriptundefined の値を表す QJSManagedValue を作成します。これは、JavaScript ヒープに格納されていない唯一の値です。デフォルトで構築された QJSManagedValue でengine() を呼び出すと、nullptr が返されます。

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

engine のヒープを使用して、value から QJSManagedValue を作成します。value 自体が管理対象で、所属エンジンがengine でない場合、結果はundefined 値となり、警告が生成されます。

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

engine のヒープを使用してvalue から QJSManagedValue を作成します。

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

engine のヒープを使用してstring から QJSManagedValue を作成します。

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

engine のヒープを使用してvariant から QJSManagedValue を作成します。

QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)

other から QJSManagedValue を移動構築します。 これにより、other は未定義を表し、どのエンジンにも属さないデフォルト構築状態になります。

[noexcept] QJSManagedValue::~QJSManagedValue()

QJSManagedValue を破棄します。

メモ : こ れに よ り 、 JavaScript ヒープ上の メ モ リ ス ロ ッ ト が解放 さ れます。QJSEngine が属するスレッドとは異なるスレッドからQJSManagedValue を破棄してはいけません。

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

このQJSManagedValue が JavaScript FunctionObject を表している場合、与えられたarguments で FunctionObject を呼び出し、その結果を返します。そうでない場合は、JavaScriptundefined の値を返します。

arguments はプリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属していなければならない。そうでない場合、呼び出しは実行されず、JavaScriptundefined の値が返されます。

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

このQJSManagedValue が JavaScript FunctionObject を表している場合、与えられたarguments でそれをコンストラクタとして呼び出し、その結果を返します。そうでない場合は、JavaScriptundefined の値を返します。

arguments はプリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属していなければならない。そうでない場合、呼び出しは実行されず、JavaScriptundefined の値が返されます。

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

このQJSManagedValue が JavaScript FunctionObject を表す場合、与えられたargumentsinstance を呼び出し、その結果を返す。そうでない場合は、JavaScriptundefined の値が返されます。

argumentsinstance は、プリミティブ値であるか、このQJSManagedValue と同じQJSEngine に属していなければならない。そうでない場合、呼び出しは実行されず、JavaScriptundefined 値が返される。

bool QJSManagedValue::deleteProperty(const QString &name)

このQJSManagedValue からプロパティname を削除します。削除が成功した場合はtrue を返し、そうでない場合はfalse を返します。

bool QJSManagedValue::deleteProperty(quint32 arrayIndex)

このQJSManagedValue からarrayIndex に格納されている値を削除します。削除に成功した場合はtrue を返し、そうでない場合はfalse を返します。

QJSEngine *QJSManagedValue::engine() const

このQJSManagedValue が属するQJSEngine を返します。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 Array オブジェクトを表す場合はtrue を、そうでない場合はfalse を返す。

bool QJSManagedValue::isBoolean() const

このQJSManagedValue の型がboolean の場合はtrue を、そうでない場合はfalse を返す。

bool QJSManagedValue::isDate() const

この値が JavaScript Date オブジェクトを表している場合はtrue を、そうでない場合はfalse を返します。

bool QJSManagedValue::isError() const

この値が JavaScript Error オブジェクトを表している場合は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

このQJSManagedValue のプロパティname を返します。プロパティが実際のオブジェクトに見つからない場合は、プロトタイプチェーンが検索されます。

setProperty()も参照してください

QJSValue QJSManagedValue::property(quint32 arrayIndex) const

このQJSManagedValuearrayIndex に格納されているプロパティを返します。このプロパティが実際のオブジェクトに見つからない場合は、プロトタイプ・チェインが検索されます。

QJSManagedValue QJSManagedValue::prototype() const

このQJSManagedValue のプロトタイプを返します。これは、どのような値に対しても動作します。たとえば、boolean の値から JavaScriptboolean のプロトタイプを取得することができます。

setPrototype()も参照してください

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

このQJSManagedValue のプロパティnamevalue に設定します。これは、object 型の JavaScript 値に対してのみ可能です。さらに、value はプリミティブか、この値と同じエンジンに属していなければなりません。

property()も参照してください

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

arrayIndexvalue をこのQJSManagedValue に格納します。これはobject 型の JavaScript 値に対してのみ可能で、値が配列でない場合は推奨されません。さらに、value はプリミティブであるか、この値と同じエンジンに属していなければなりません。

void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)

このQJSManagedValue のプロトタイプをprototype に設定します。前提条件は、prototype がこのQJSManagedValue と同じQJSEngine に属し、オブジェクト(NULL を含む)であることです。さらに、このQJSManagedValue もオブジェクト(ヌルを除く)でなければならず、プロトタイプのサイクルを作成することはできない。

prototype()も参照

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

このQJSManagedValueother に対して、JavaScript の '===' 演算子を呼び出し、その結果を返します。

equalsも参照して ください。

bool QJSManagedValue::toBoolean() const

管理値をブール値に変換します。管理値がブール値を保持している場合、その値が返されます。そうでない場合は、JavaScript のルールによる boolean の強制が行われます。

QDateTime QJSManagedValue::toDateTime() const

このQJSManagedValue が JavaScript Date オブジェクトを保持している場合、同等のQDateTime を返します。そうでない場合は無効なものを返します。

int QJSManagedValue::toInteger() const

変換された値を整数に変換します。これはまずtoNumber() のルールで値を数値に変換し、JavaScript のビットシフト演算子の引数を 32 ビット整数に強制するために与えられたルールで整数範囲にクランプします。

内部的には、値はすでに整数として格納されているかもしれません。

注意: 管理値を数値に変換すると例外が発生することがあります。特に、シンボルを数値に強制することはできませんし、カスタムvalueOf()メソッドがスローすることもあります。この場合、結果は0となり、変換後にエンジンがエラーを発生させます。

注意: 数値を32ビット整数に強制するJavaScriptのルールは直感的ではありません。

QJSValue QJSManagedValue::toJSValue() const

このQJSManagedValue を新しいQJSValue にコピーします。これはQJSManagedValue からQJSValue を移動構築するよりも効率が悪いが、QJSManagedValue を保持する。

double QJSManagedValue::toNumber() const

管理値を数値に変換する。管理値が数値を保持していれば、その数値が返される。そうでない場合は、JavaScript のルールによる数値の強制が実行されます。

注意: 管理値から数値への変換は例外を投げる可能性があります。特に、記号を数値に強制することはできませんし、カスタムの valueOf() メソッドがスローすることもあります。この場合、結果は0となり、変換後にエンジンがエラーを伝えます。

QJSPrimitiveValue QJSManagedValue::toPrimitive() const

管理された値をQJSPrimitiveValue に変換します。 管理された値がQJSPrimitiveValue でサポートされる型を保持している場合、値はコピーされます。そうでない場合、値は文字列に変換され、その文字列はQJSPrimitiveValue に格納されます。

注意: 管理された値を文字列に変換すると、例外が発生することがある。特に、シンボルを文字列に強制することはできませんし、カスタムのtoString() メソッドがスローすることもあります。この場合、結果は未定義値となり、変換後にエンジンはエラーを出力します。

const QMetaObject *QJSManagedValue::toQMetaObject() const

このQJSManagedValueQMetaObject ポインタを保持している場合、それを返します。そうでない場合は nullptr を返します。

QObject *QJSManagedValue::toQObject() const

このQJSManagedValueQObject ポインタを保持している場合、それを返します。そうでない場合は 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)

Move-assign aQJSManagedValue fromother. こ れに よ り 、other はデフ ォ ル ト 構成 さ れた状態にな り ます。 こ の状態では、 未定義を表 し てお り 、 ど のエン ジ ン に も 属 し ません。

注意: これにより、このQJSManagedValue が JavaScript ヒープ上で保持しているメモリ スロットが解放されます。QJSEngine が属しているスレッドとは異なるスレッドでQJSManagedValue をムーブアサインしてはいけません。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。