From a6bc3b26f1f9d78c26cab02edc0f3b9a3e482cb7 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Wed, 25 Apr 2018 16:22:38 +0800 Subject: [PATCH] fix(autojs): script bridges convert boolean to Boolean --- autojs/src/main/assets/modules/__bridges__.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/autojs/src/main/assets/modules/__bridges__.js b/autojs/src/main/assets/modules/__bridges__.js index e5dfaba6..2123a36a 100644 --- a/autojs/src/main/assets/modules/__bridges__.js +++ b/autojs/src/main/assets/modules/__bridges__.js @@ -10,17 +10,26 @@ bridges.call = function (func, target, args) { return func.apply(target, arr); }; +/* + Java Object: 拥有getClass, notify, toString, hashCode, equals等函数 + 没有prototype, __proto__, constructor等属性 + 使用obj.xxx时如果没有xxx属性可能会直接抛出异常而不是undefined??? + 只能使用in关键字来判断某个属性是否存在(但in关键字不能用于JavaScript基本类型) + typeof()返回'object' + instanceof Object为false + +*/ function wrap(value){ - if(!(value instanceof Object && 'getClass' in value && util.isFunction(value.getClass))){ + if(!(typeof(value) == 'object' && value.getClass && util.isFunction(value.getClass))){ return value; } var c = value.getClass(); - if(!('getName' in c && util.isFunction(c.getName))){ + if(!(c.getName && util.isFunction(c.getName))){ return value; } var name = c.getName(); if(name == 'java.lang.Boolean'){ - return Boolean(value); + return value == true; } //TODO: is is necessary? if(name == 'java.lang.Integer' || name == 'java.lang.Long' || name == 'java.lang.Double'