Для юристов на языке программирования я просмотрел следующие разделы ECMAScript 5.1 (который легче читать, чем последнее издание), и дойдите до , задав его в списке рассылки ECMAScript ,
TL; DR : все передаются по значению, но свойства объектов - это ссылки, а определение объекта, как правило, отсутствует в стандарте.
Раздел 11.2.4 «Списки аргументов» говорит следующее о создании списка аргументов, состоящего всего из 1 аргумента:
Вывод ArgumentList: AssignmentExpression оценивается следующим образом:
- Пусть ref является результатом оценки AssignmentExpression.
- Пусть arg - GetValue (ref).
- Возвращает список, единственным элементом которого является arg.
В этом разделе также перечислены случаи, когда список аргументов имеет 0 или> 1 аргумент.
Таким образом, все передается по ссылке.
Доступ к свойствам объекта
Раздел 11.2.1 «Аксессоры свойств»
Вывод MemberExpression: MemberExpression [Expression] оценивается следующим образом:
- Пусть baseReference будет результатом оценки MemberExpression.
- Пусть baseValue будет GetValue (baseReference).
- Пусть свойствоNameReference является результатом вычисления выражения.
- Пусть свойствоNameValue будет GetValue (свойствоNameReference).
- Вызов CheckObjectCoercible (baseValue).
- Пусть свойствоNameString будет ToString (propertyNameValue).
- If синтаксическое производство, которое оценивается, содержится в коде строгого режима, пусть строгое истинно, иначе пусть строгое будет ложным.
- Возвращает значение типа Reference , базовое значение которого baseValue и ссылочным именем которого является свойствоNameString, а флаг строгого режима - строгий.
Таким образом, свойства объектов всегда доступны как рефери се.
On Reference
Описан в разделе 8.7 «Тип ссылочной спецификации», что ссылки не являются реальными типами на языке - они используются только для описания поведения delete, typeof и операторы присваивания.
Определение «Object»
В редакции 5.1 определено, что «Object - это совокупность свойств». Поэтому мы можем заключить, что значение объекта - это коллекция, но что касается того, что значение коллекции плохо определено в спецификации, и требует немного усилий для понимания.
Вы можете попытаться выполнить итерацию строки, используя класс QXmlStreamReader, и извлечь весь текст (если ваша строка HTML гарантируется, что она хорошо сформирована XML).
Что-то вроде этого:
QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
if ( xml.readNext() == QXmlStreamReader::Characters ) {
textString += xml.text();
}
}
, но я не уверен, что его 100% действительное использование QXmlStreamReader API, так как я использовал его довольно давно и может что-то забыть.
этот ответ для тех, кто прочитал это сообщение позже и использовал Qt5 или новее. просто избегайте html-символов, используя встроенные функции, как показано ниже.
QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.
QString::toHtmlEscaped
не удаляет html-теги. Просто преобразует символы, такие как <
, >
и т. Д., В html-коды.
– Marcus
24 March 2017 в 20:36
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
<br>
удаляется, а не преобразуется в символ новой строки.
– Marcus
24 March 2017 в 20:40
ситуация, когда какой-то html не совсем проверяет xml, делает его хуже для правильной работы.
Если это допустимый xml (или не слишком плохо сформированный), я думаю, что QXmlStreamReader + QXmlStreamEntityResolver может быть не плохой идеей.
Пример кода в: https: // github. com / ycheng / misccode / blob / master / qt_html_parse / utils.cpp
(это может быть комментарий, но у меня все еще нет разрешения на это)
Если вы не заботитесь о производительности, то QTextDocument
делает довольно хорошую работу по преобразованию HTML в обычный текст.
QTextDocument doc;
doc.setHtml( htmlString );
return doc.toPlainText();
Я знаю, что этот вопрос старый, но я смотрел для быстрого и грязного способа обработки неправильного HTML. Парсер XML не давал хороших результатов.
QTextDocumentFragment
: QString plainText = QTextDocumentFragment::fromHtml( htmlString ).toPlainText();
– Marcus
24 March 2017 в 20:43
textString
вместоtextStream
? – Alireza Mirian 25 August 2012 в 15:31