docs: public static boolean toBoolean(Object val)
      {
          for (;;) {
              if (val instanceof Boolean)
                  return ((Boolean) val).booleanValue();
              if (val == null || val == Undefined.instance)
                  return false;
              if (val instanceof CharSequence)
                  return ((CharSequence) val).length() != 0;
              if (val instanceof Number) {
                  double d = ((Number) val).doubleValue();
                  return (d == d && d != 0.0);
              }
              if (val instanceof Scriptable) {
                  if (val instanceof ScriptableObject &&
                      ((ScriptableObject) val).avoidObjectDetection())
                  {
                      return false;
                  }
                  if (Context.getContext().isVersionECMA1()) {
                      // pure ECMA
                      return true;
                  }
                  // ECMA extension
                  val = ((Scriptable) val).getDefaultValue(BooleanClass);
                  if ((val instanceof Scriptable) && !isSymbol(val))
                      throw errorWithClassName("msg.primitive.expected", val);
                  continue;
              }
              warnAboutNonJSObject(val);
              return true;
          }
      }