如何在RHINO中获取变量的类型?

时间:2013-01-25 15:41:24

标签: java javascript rhino

我正在将一些使用SpiderMonkey的代码翻译成RHINO, 它使用方法JSVAL_IS_INT(val),其中'val'是jsval(SpiderMonkey代码), 我尝试使用RHINO的toNumber(val),其中'val'是Object的一个实例, 但似乎toNumber没有检查'val'的类型。

这是类似案例的代码,使用toBoolean:

    ContextTest ct = new ContextTest();
    ct.val = "lol";
    System.out.println(Context.toBoolean(ct.val));
    System.out.println(ct.val);

这表明:

true
lol

但是toBoolean()不应该返回true。

1 个答案:

答案 0 :(得分:1)

toBoolean,toNumber等上下文方法不适合检查类型。这些方法尝试进行“强制转换”,但不检查类型。 在您的示例中,toBoolean返回true,因为string不为空(请参阅context class source)。

要检查/转换值为整数使用:

  if(val instanceof Integer) {
           Integer valInt = (Integer) val;
           System.out.println(valInt);
        } else if(val instanceof Scriptable) { //Rhino class embedes any js value
           Scriptable s = (Scriptable) val;
           String className = s.getClassName();// ECMA class name
           System.out.println(className);
           if(className.toLowerCase().equals("number")) {
              System.out.println(Context.toNumber(val)); 
           }
        }