Действительно ли это правильно? Ошибка jQuery, которая стирает хранилище данных?

Вот еще одно решение:

for(String serverId : serverIds) {
   sb.append(",");
   sb.append(serverId); 
}

String resultingString = "";
if ( sb.length() > 1 ) {
    resultingString = sb.substring(1);
}
6
задан Keith Bentrup 29 June 2009 в 13:37
поделиться

2 ответа

Почему в конечном итоге есть разница?

Оба thisx и this.x вычисляются при вызове функции. Первый относится к неопределенному имени переменной, и это вызывает ошибку ссылки. Второй обращается к неопределенному свойству объекта, что приводит к значению undefined . Именно так в этих случаях ведет себя javascript.

Теперь, когда JQuery вызывается во втором случае, вызов $ (this. x) оценивается как $ (undefined) , что аналогично тому, как если бы вы просто вызывали $ () . Поскольку JQuery выглядит так, как будто аргумент не был предоставлен, вместо него используется значение по умолчанию, и в этом случае по умолчанию используется документ . Затем он пытается удалить документ , поскольку он фактически назывался $ (). Remove () , и в этом случае этого следовало ожидать.

Предложения по обработке this?

Разница с ReferenceError - это фундаментальное отличие Javascript, с этим мало что можно сделать. Поведение JQuerys прискорбно и является следствием установки значений по умолчанию arg = arg || default . Вместо этого можно использовать arguments.length , чтобы получить реальное количество параметров вызова,

3
ответ дан 17 December 2019 в 02:32
поделиться

Попробуйте также ввести их в консоль (без заранее определенных дополнительных переменных):

> 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)
3
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: