我在验证 QtScript 脚本中的值时遇到了一些问题。验证器函数如下所示:
function isValueInvalid(value) {
return typeof value=="undefined" || value == null || value == "" || value == "X";
}
该字符串"X"
在我的设置中也是无效值。这些值被添加到一些对象,如下所示:
someQtscriptValue.setProperty(name, myQtScriptEngine.newVariant(someQVariant));
现在问题是转换"undefined"
为字符串的值不断通过typeof
检查。所以我添加了测试调试输出。someQtscriptValue
我在脚本中打印了整个内容:
// This is qtscript code:
print("Validating row "+JSON.stringify(someQtscriptValue));
结果令人困惑(缩短了,看起来都一样):
Validating row {"SJZ_A":{},"SJZ_B":{},"SJZ_C":{},"SJZ_D":{},"SJZ_E":{}}
我还决定打印有关每个值的一些信息:
var propName = "name of one of the properties";
var isValid = !isValueInvalidCEPS(someQtscriptValue[propName]);
print("someQtscriptValue[\""+propName+"\"] = "+someQtscriptValue[propName]+" ("+(isValid?"valid":"invalid")+") type="+(typeof someQtscriptValue[propName]));
而这更令人惊讶:
someQtscriptValue["name1"] = ULSE (valid) type=object
someQtscriptValue["name2"] = 22 (valid) type=object
someQtscriptValue["name3"] = undefined (valid) type=object
显然,如果我从中做QScriptValue
出来的QVariant
行为就像一个对象,因为包括“未定义”在内的所有值都具有对象类型。
那么从 QVariants 创建 QScript 值的正确方法是什么?