Вот еще одно решение:
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
String resultingString = "";
if ( sb.length() > 1 ) {
resultingString = sb.substring(1);
}
Почему в конечном итоге есть разница?
Оба thisx
и this.x
вычисляются при вызове функции. Первый относится к неопределенному имени переменной, и это вызывает ошибку ссылки. Второй обращается к неопределенному свойству объекта, что приводит к значению undefined
. Именно так в этих случаях ведет себя javascript.
Теперь, когда JQuery вызывается во втором случае, вызов $ (this. x)
оценивается как $ (undefined)
, что аналогично тому, как если бы вы просто вызывали $ ()
. Поскольку JQuery выглядит так, как будто аргумент не был предоставлен, вместо него используется значение по умолчанию, и в этом случае по умолчанию используется документ
. Затем он пытается удалить документ
, поскольку он фактически назывался $ (). Remove ()
, и в этом случае этого следовало ожидать.
Предложения по обработке this?
Разница с ReferenceError
- это фундаментальное отличие Javascript, с этим мало что можно сделать. Поведение JQuerys прискорбно и является следствием установки значений по умолчанию arg = arg || default
. Вместо этого можно использовать arguments.length
, чтобы получить реальное количество параметров вызова,
Попробуйте также ввести их в консоль (без заранее определенных дополнительных переменных):
> a
ReferenceError: Can't find variable: a
> b = {}
Object
> b.a
undefined
одна - ошибка javascript, одна - возвращает undefined (которую jQuery интерпретирует как $ ( )
, потому что javascript и jQuery не могут определить функции $ ()
и $ (undefined)
отдельно)
именно так работает javascript, ошибка или функция I оставьте открытым для обсуждения, но я не думаю, что это ошибка или проблема jQuery.
редактировать: почему в jQuery определено $ ()
?
Из документации:
По умолчанию, если контекст не указан, $ () ищет элементы DOM внутри контекст текущего HTML-документа. Если вы укажете контекст, например Элемент DOM или объект jQuery, выражение будет сопоставлено с содержимое этого контекста.
edit : документы ссылались на аргумент контекста, переданный в $ ()
, а не на вызов $ ()
без аргументов, поэтому здесь это не имеет значения .
также обратите внимание, что
$().get(0) == $("").get(0)