bool HsQMLAutoListModel::equalityTest(const QJSValue& a, const QJSValue& b) { if (mEqualityTestValid) { QJSValueList args; args.append(a); args.append(b); return mEqualityTest.call(args).toBool(); } else { return a.equals(b); } }
/*! Returns true if this QJSValue is equal to \a other, otherwise returns false. The comparison follows the behavior described in \l{ECMA-262} section 11.9.3, "The Abstract Equality Comparison Algorithm". This function can return true even if the type of this QJSValue is different from the type of the \a other value; i.e. the comparison is not strict. For example, comparing the number 9 to the string "9" returns true; comparing an undefined value to a null value returns true; comparing a \c{Number} object whose primitive value is 6 to a \c{String} object whose primitive value is "6" returns true; and comparing the number 1 to the boolean value \c{true} returns true. If you want to perform a comparison without such implicit value conversion, use strictlyEquals(). Note that if this QJSValue or the \a other value are objects, calling this function has side effects on the script engine, since the engine will call the object's valueOf() function (and possibly toString()) in an attempt to convert the object to a primitive value (possibly resulting in an uncaught script exception). \sa strictlyEquals() */ bool QJSValue::equals(const QJSValue& other) const { if (d->value.isEmpty()) { if (other.d->value.isEmpty()) return d->string == other.d->string; return js_equal(d->string, QV4::ValueRef(other.d->value)); } if (other.d->value.isEmpty()) return other.equals(*this); return __qmljs_cmp_eq(QV4::ValueRef(d), QV4::ValueRef(other.d)); }