Обсуждение:Синтаксис JavaScript


Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Неточность (требуется ссылка)

Следующее утверждение: « операторы else должны быть объединены (т. е. «} else {» , все в одной строке), иначе некоторые браузеры могут неправильно их анализировать », найденное в разделе 5.1, неверно. Я программирую на javascript уже 4 года и никогда не использовал этот стиль программирования. Я еще не заметил каких-либо несовместимостей браузера. Если это утверждение верно, пожалуйста, приведите цитату. - Кикбой 04:07, 24 августа 2006 (UTC)

Наследование без прототипирования и т.д.

Я удалил эту часть, потому что это не синтаксис, он не очень полезен или распространен в наше время и так далее. Этот и предыдущий раздел нуждаются в некотором пояснении, так как он длинный и кое-что освещается несколько раз, но сейчас я не готов к этому. Квамаретто 03:19, 20 февраля 2006 г. (UTC)

Предвзятые взгляды

Я немного удивлен поведением Квамаретто. Он склонен отбрасывать материалы, которые не вписываются в его взгляды на JavaScript. В настоящее время я не уверен, стоит ли мне тратить свое время на вклад в Википедию, если другим так легко навязывать свое предвзятое мнение другим.

Что касается наиболее релевантных источников, вы , по-видимому, были правы в отношении происхождения синтаксиса в отношении Java и других языков, и я оставил исходную цитату в статье. (В первый раз, когда я удалил ваш материал, я предположил, что вы тролите или не имеете соответствующего источника, поскольку вы его не представили. Думаю, это изменение - моя ошибка.)
Что касается других материалов, вы должны увидеть статью WP:NOR и другие в WP:Чем Википедия не является . На все есть веские причины. Раздел сравнения языков — это исходный материал, который вы написали, чтобы продемонстрировать свою точку зрения, что уже ясно продемонстрировано цитатой.
По сути, я исправил ваши изменения, чтобы представить актуальную информацию, которую вы дали, а также сохранить заявленные правила Википедии. Нет причин расстраиваться по этому поводу. Квамаретто 00:02, 28 апреля 2006 г. (UTC)
Посмотрите на большое количество примеров кода в разделах ниже. Например, раздел заданий. Действительно ли это хорошая идея представить читателю тонны почти не прокомментированных примеров? Разрешено ли сталкивать пользователей с огромным количеством примеров кода, но нельзя ли объяснять им, что присваивание и операторы были заимствованы из C почти без изменений? Прежде чем представить множество скучных примеров, я хотел дать читателю приблизительную схему того, чего ожидать.
Вторая причина перечисления происхождения элементов синтаксиса заключалась в том, чтобы познакомить читателя с темой синтаксиса JavaScript. Не было ни одного.
Еще одно наблюдение, которое лишило меня дара речи, заключается в том, что мое введение выбрасывается, а другие коммерческие артефакты сохраняются. Посмотрите на третий абзац страницы JavaScript . Посмотрите на две ссылки в конце абзаца. Ссылка 2 может быть оправдана (торговые марки Sun), но ссылка 1 указывает на несвязанную страницу авторского права в SAP. Мне это кажется коммерческой диверсией. Но, возможно, я просто не понял более глубокого смысла. Поэтому я оставил его без изменений, потому что подумал, что мог неправильно его понять.
Гораздо проще выбросить чужой вклад, чем сначала попытаться понять, что они написали. Вот почему Википедия не готова конкурировать с другими ценными источниками информации.
Я не знаю, почему была включена ссылка на SAP, кроме того, что она повторяет утверждение на странице Sun. Это не совсем видное место для рекламы, так что это не вероятный мотив.
Что касается кода с небольшим количеством комментариев, цель состоит в том, чтобы написать точный энциклопедический материал. Предоставление легкого введения в язык не является. Да, эта страница в беспорядке и нуждается в доработке, но раньше было еще хуже.
О введении, которое вы написали, см. выше в разделе «Оригинальная мысль». Есть правила; следуйте им, и люди не отменят ваши изменения.
В любом случае, не думайте, что люди отменят все, что вы здесь напишете. Если вы напишете что-нибудь еще, я отложу, если это явно не выходит за рамки. Было бы полезно, если бы вы написали уточняющий вступительный абзац или несколько, резюмирующих особенности синтаксиса. Обратите внимание на рекомендации, и, вероятно, никто вас не побеспокоит. Квамаретто 22:23, 28 апреля 2006 г. (UTC)

Отсутствующие синтаксические структуры

В этой статье можно было бы упомянуть литералы функций, литералы регулярных выражений и, возможно, прототипирование объектов. 08:10, 16 августа 2006 г. (UTC)

В статье также отсутствует обсуждение конструкции with(). (Не уверен, квалифицируется ли это как оператор или синтаксис, я думаю, что технически это оператор).

Как насчет дополнительных применений ()? Например, этот синтаксис, распространенный в современных фреймворках: (function() { ... })(); Ziemkowski 17:20, 12 сентября 2007 г. (UTC)

with()это оператор для изменения цепочки областей видимости. Я не знаю, можно ли считать это управляющей структурой.
()оператор вызова функции. ()после функции - это только синтаксис вызова функции. (function() { ... })();только синтаксис выражения функции и синтаксис вызова функции используются вместе. — LungZeno ( разговор ) 22:45, 27 января 2009 г. (UTC)

Молодец

Это была отличная статья для тех, кому нужен краткий справочник по конкретным различиям между синтаксисом JavaScript и синтаксисом таких языков, как Java и C++, для тех, кто имеет опыт работы с этими языками и работает над небольшим проектом на JavaScript.

Да, большое спасибо автору(ам). Коротко и по делу. — Предыдущий неподписанный комментарий добавлен 84.167.27.253 ( обсуждение ) 19:02, 29 мая 2008 г. (UTC)

Разные и зарезервированные слова

Я думаю, что раздел «Разное» можно было бы переписать и, возможно, переименовать в « Синтаксический анализ» или что-то в этом роде. Нам действительно не нужен заголовок третьего уровня для простого предложения «JavaScript чувствителен к регистру». Кроме того, в статью следует добавить зарезервированные слова JavaScript. 209.92.136.131 21:37, 12 декабря 2006 г. (UTC)

Разные

Переменные: в нем говорится: «Переменные в стандартном JavaScript не имеют прикрепленного типа, и любое значение может быть сохранено в любой переменной». Но когда переменной присваивается значение, ее тип записывается, т.е. присоединяется. Что-то вроде «Переменная в стандартном JavaScript не имеет фиксированного типа, и любой тип значения может храниться в любой переменной». возможно? Значение 0,1 нельзя хранить точно как число, поэтому «любое значение» может ввести в заблуждение.

Предлагаю перефразировать (слишком запутанно?): Переменные — это варианты типов [ссылка? статьи пока нет], которые могут принимать любое значение из небольшого числа типов [сноска № 1], и которые неявно преобразуются или изменяются по мере необходимости. По сути, любое значение может быть сохранено в любой переменной.
сноска №1: число, строка, объект, логическое значение. Функции являются объектами, поэтому их также можно хранить в переменных]

Переменные (2): в нем говорится: «... [в функции] переменные, используемые без объявления с помощью« var », являются глобальными (могут использоваться всей программой)».
Это требует разъяснения: переменные, объявленные в функции, имеют глобальную область видимости, но не определены до тех пор, пока функция не будет вычислена, а функция не может быть оценена — в глобальной области видимости — до тех пор, пока она не будет объявлена. По сути, нужно объявить перед использованием.
Относительно примера кода: любое использование «двадцати» вызывает ReferenceError до тех пор, пока f не будет объявлен и вызван хотя бы один раз.
Обратите внимание, что функции, объявленные внутри области действия функции, могут быть вызваны внутри этой области до того, как появится исходный текст. Опять же, переменные, объявленные без var во внутренних функциях, не могут использоваться до тех пор, пока функция не будет вызвана.

На самом деле, это немного сложнее, чем в приведенном выше абзаце. Переменная, просто используемая внутри функции без указания области действия, МОЖЕТ быть глобальной, но синтаксический анализатор javascript должен начинаться в нижней части цепочки контекста выполнения (т. е. функции, в которой находится оператор), а затем итеративно искать область выше в цепи. Таким образом, если у вас есть вложенные функции, можно использовать переменную без создания ее экземпляра с помощью var , но она не будет доступна глобально, если есть внешняя функция, в которой определена эта переменная. Это одна из концепций, делающих возможными замыкания в JavaScript. 24.49.69.72 17:50, 7 апреля 2007 г. (UTC)

Числа: в нем говорится: «... они не всегда точно представляют десятичные числа, особенно дроби». Они могут точно представлять все целые числа до 2 53 . Итак, «... они обычно не точно представляют десятичные дроби».

Строки: набор символов в настоящее время не упоминается - поставить «последовательность символов UniCode»? Третий пример может иллюстрировать ' внутри "...", например, \t \n, \u03A3. В MSIE6 и, насколько я помню, в ECMA-262 строки НЕ МОГУТ индексироваться как массивы.

Арифметика: Плюс также является унарным оператором. Это полезно для преобразования строки (или логического значения) в число: Count = +MyForm.Ctrl.value .

Запятая: я не вижу упоминания об этом. Нет примера списка переменных , ничего для поддержки (J=0, K=1; K<4; K++) {} , что, я надеюсь, является законным.

82.163.24.100 16:56, 31 января 2007 г. (UTC)


Я не вижу упоминания метки continue break в связи с циклами. 82.163.24.100 13:36, 29 октября 2007 г. (UTC)

Многомерные массивы

Это действительно хорошо, но я думаю, что было бы неплохо иметь один абзац о многомерных массивах и несколько примеров их объявления и использования, поскольку (по крайней мере, для двух измерений) это очень распространенное использование. — Предыдущий неподписанный комментарий добавлен 167.1.146.100 ( обсуждение ) 12:59, 8 февраля 2008 г. (UTC)

«Современное» прототипирование

Все браузеры, соответствующие основным стандартам, поддерживают объект __proto__ в Elements, а также __defineGetter__ и __defineSetter__. Возможно, это должно быть включено в документ? — Предыдущий неподписанный комментарий добавлен Yhulkdsfdd ( обсуждение • вклад ) 17:44, 11 сентября 2008 г. (UTC)

Поскольку трудно определить, что есть в JavaScript, а что нет из-за отсутствия спецификации, определяющей отличия от ECMAScript, я не уверен, что нам следует упоминать __proto__, __defineGetter__ и __defineSetter__. -- Майан ( разговор ) 21:34, 11 сентября 2008 г. (UTC)

[править] Если... иначе

Не следует ли пояснить, что следующее:

если ( x == 1 ){ что-  то () } еще  если ( x == 2 ){ что-  то еще (); }

else if работает как сокращение if (без {})

если ( x == 1 )  сделайте что-  нибудь  здесьтак и  есть на самом деле  ,  если ( x == 1 ){ что- то () } else { если ( x == 2 ){ что- то еще (); } }    

Извините, если это не имело смысла, мне трудно объяснить.

Для меня это деталь реализации. Можете ли вы привести пример различного поведения (с точки зрения программиста) между конструкциями else { if(...){ } }и elsif(...){ }? — Хайфер ( разговор ) 08:38, 20 марта 2011 г. (UTC)

Побитовый

Это нужно объяснить. Поскольку остальная часть статьи объясняет все достаточно подробно, это больше похоже на список.

Ссылки на часто задаваемые вопросы меняются

Разделы часто задаваемых вопросов CLJ переупорядочиваются и преобразуются из числовых привязок в текстовые. Когда это будет завершено, следует поискать в Вики такие ссылки для исправления. Я обновил два в этой статье. 82.163.24.100 ( разговор ) 18:34, 12 октября 2008 г. (UTC)

Для цикла: конечное условие?

 for  ( начальное ; конечное условие ; оператор цикла ) { /*  операторы будут выполняться каждый раз ,  когда цикл for{} будет выполняться до тех пор, пока не будет выполнено конечное  условие  */ }    

Условие должно называться while-condition или просто condition , но никогда не end-condition . Как и в любом C-подобном языке, цикл for{} повторяется до тех пор , пока выполняется условие. -- Комо ( разговор ) 14:28, 23 октября 2008 г. (UTC)

Никакого ответа в течение нескольких месяцев... Я полагаю, что все согласны, поэтому я осмелился изменить статью. -- Комо ( разговор ) 09:26, 3 марта 2009 г. (UTC)

без колебаний
for(initial; condition; loopstatement) s;
действительно является синтаксическим сахаром для
initial; while(condition){ s; loopstatement; } — Предыдущий неподписанный комментарий добавлен пользователем 201.124.237.242 ( обсуждение ) 09:05, 25 декабря 2019 г. (UTC)

Переработанные методы и наследование

Многое из того, что написано об этом в Интернете, неверно, вводит в заблуждение или слишком запутано в семантике браузера, чтобы быть понятным. Поэтому я добавил краткие, нетривиальные примеры, которые подчеркивают проблемы. Я немного научился в процессе. Все образцы проверены.

Я надеюсь, что другие найдут это полезным, особенно те, кто пришел из других ОО-языков, которые сильно отличаются.

Статью, вероятно, следует переименовать во что-то вроде «Язык JavaScript», а не «Синтаксис». Синтаксис без семантики бесполезен. Но я думаю, что на данный момент содержание достаточно хорошее — краткий обзор.

Логика прототипирования JavaScript довольно странная ИМХО. Ссылки на классический Lisp IS-A подойдут. Но в JavaScript его путают с мышлением C++. MyFunction.prototype совершенно неверен - это должно быть просто this.prototype = parent. Не нужно магии. Tuntable ( разговор ) 07:47, 3 февраля 2009 г. (UTC)

For...In и Arrays: можно использовать вместе или нет?

В статье говорится, что For...In нельзя использовать с массивами, но веб-сайт W3Schools дает массивы в качестве примера использования For...In: http://www.w3schools.com/js/js_loop_for_in.asp и Microsoft Developer Network специально заявляет, что For...In можно использовать для «прохода через… все элементы массива», не предупреждая о неожиданных результатах. (Правда, это относится к JScript, а не к JavaScript, и я не понимаю отношения между ними.) http://msdn.microsoft.com/en-us/library/kw1tezhk(VS.85).aspx FrankSier ( разговор ) 15:44, 6 февраля 2009 г. (UTC)

Я провел некоторое исследование по этому вопросу - не оригинальное исследование :) - и изменил статью, в основном добавив некоторые встроенные ссылки. FrankSier ( разговор ) 21:37, 7 февраля 2009 г. (UTC)

Метод toFixed

Метод toFixed не следует рекомендовать для Интернета, потому что он ненадежен в MS IE 7, и я думаю, что все предыдущие версии IE, в которых он был - 0.07.toFixed(1) дает 0.0 . Алгоритм StrU , который сейчас находится на http://www.merlyn.demon.co.uk/js-rndg1.htm#GC , не содержит известных ошибок. 82.163.24.100 ( разговор ) 18:44, 3 апреля 2009 г. (UTC)

Internet Explorer использует JScript, а не JavaScript, он работает со всеми браузерами JavaScript. 72.152.120.17 ( разговор ) 19:10, 4 марта 2011 г. (UTC)

Нет, JScript в настоящее время — это ECMAScript 3, как и JavaScript 1.5. Подтверждено Википедией через цитату Дугласа Крокфорда: http://en.wikipedia.org/wiki/JScript#Comparison_to_JavaScript . -- Hibou57 ( разговор ) 20:09, 18 июля 2013 г. (UTC)

оповещение против println

Есть ли причина, по которой в примерах используется println вместо alert? Мне нравится JavaScript на клиенте и сервере, и я каждый день кодирую на нем (помогает оплачивать счета), но я бы _не_ писал на JavaScript, если бы не вездесущий веб-браузер. Учитывая, что JavaScript был изобретен как язык сценариев браузера, кто-нибудь будет возражать против того, чтобы я заменил println на alert? Я бы также изменил примечание в верхней части страницы, отметив, что предупреждение предполагает, что любой пользователь, который копирует и вставляет примеры, будет работать в браузере. Джеремивосборн ( разговор ) 21:02, 15 апреля 2009 г. (UTC)

Ссылка на «println» заменена на вызовы функций «alert», а также обоснование использования «alert». Джеремивосборн ( разговор ) 01:43, 22 апреля 2009 г. (UTC)

Я был тем, кто заменил все ссылки на document.write/alert на println. Для меня JavaScript — это просто язык, который чаще всего используется в Интернете. Я пытался сделать статью как можно более конкретной для языка, не усложняя ее DOM, который НЕ является частью JavaScript. Но я достаточно счастлив, пока есть примечание, объясняющее, что document.write/alert не является частью JavaScript и используется только потому, что браузер является наиболее распространенным хостом JavaScript. -- Майан ( разговор ) 07:50, 22 апреля 2009 г. (UTC)
Спасибо за ответ Майян. Очень сложно создавать наглядные примеры JavaScript без стандартной функции вывода. После стольких часов программирования на этом иногда прекрасном, а иногда и ужасном языке я решил, что ошибусь в сторону совместимости с браузером. Джеремивосборн ( разговор ) 20:09, 22 апреля 2009 г. (UTC)

Я часто использую оповещения. Почему println? ElliottBelardo ( разговор ) 21:03, 8 июля 2013 г. (UTC)

Функции

Код можно изменить, чтобы также проиллюстрировать тернарный оператор ? :  :

вернуть  разницу  >  0  ?  НОД ( сегментB ,  разн . )  :  НОД ( сегментA ,  -разн . )

Так как код может быть скопирован, было бы неплохо изменить его после тестирования на более эффективный метод, в котором вторым аргументом внутреннего gcd является либо A mod B , либо B mod A , что примерно одинаково легко читается . ; или к чудесной нерекурсивной форме:

function  GCD ( U ,  V )  {  // или HCF  while  ( true )  {  if  ( ! ( U  %=  V ))  return  V  if  ( ! ( V  %=  U ))  return  U  }  }

И по той же причине следует включить альтернативную аббревиатуру HCF. 82.163.24.100 ( разговор ) 20:01, 24 июля 2009 г. (UTC)

Нативные объекты

Я дополнил список нативных объектов ссылкой на стандарт.

Страница не должна быть слишком длинной, а подробное описание нативных объектов займет много места. Как насчет новой страницы для объектов JavaScript, где записи на странице синтаксиса будут сжаты примерно до размера первого абзаца о массивах? 82.163.24.100 ( разговор ) 11:51, 26 июля 2009 г. (UTC)

Добавить описание математического объекта

Это мой первый вклад в Википедию. (-: Так что будьте добры ко мне! :-)
Я тоже новичок в JavaScript, хотя занимаюсь компьютерами с 1960-х.

Буду признателен за любые предложения или комментарии по поводу моей попытки вставить описание объекта Math. Место, где это появляется (5.4), похоже, не нуждается в большем, чем это описание, не так ли? Возможно, в другом месте должно быть больше информации об арифметике. EG. Приоритет операторов не обсуждается.

Пример в конце слишком сложен? Я хотел получить несколько разных методов в одной строке кода. - Wogga62 22:55, 15 сентября 2009 г. (UTC) — Предыдущий неподписанный комментарий добавлен Wogga62 ( обсуждение • вклад )

Ну, во-первых, мне не очень нравится, как эта статья впихивает JavaScript API в статью о синтаксисе JavaScript . Я бы предпочел, чтобы все это было перенесено в викиучебник.
С учетом сказанного, мне нравится стол. Он может использовать ссылки в столбце описания, например, e (математическая константа) (кстати, это число Эйлера, а не константа Эйлера ). А пример и ссылка на w3schools внизу излишни.
-- Майан ( разговор ) 07:33, 18 сентября 2009 г. (UTC)

Конструкторы и создание объектов

В тексте утверждается, что функция-конструктор, вызываемая при создании экземпляра объекта (т. е. функция, на которую ссылается «новое» выражение), «не запоминается». Это неверно во всех основных браузерах: свойство «конструктор» каждого объекта содержит ссылку на функцию-конструктор. ( Pointym5 ( разговор ) 16:34, 29 декабря 2009 г. (UTC))

Тот факт, что список параметров конструктора является необязательным в «новом» выражении, не обсуждается. ( Pointym5 ( разговор ) 16:41, 29 декабря 2009 г. (UTC))

Допустимые символы в идентификаторах

ГДЕ ПРАВИЛА ДЛЯ ВСЕХ ПРАВОВЫХ, НО СТРАШНЫХ СИМВОЛОВ В ИДЕНТИФИКАТОРАХ? (например, "$", "_" и т. д.) — Предыдущий неподписанный комментарий, добавленный 24.129.93.200 ( обсуждение ) 16:29, 16 сентября 2010 г. (UTC) ( перенесено в новый раздел )

Добавлено в JavaScript_syntax#Variables : «Идентификатор должен начинаться с буквы, подчеркивания (_) или знака доллара ($); последующие символы также могут быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру, буквы включают символы " от A" до "Z" (верхний регистр) и символы от "a" до "z" (нижний регистр). Начиная с JavaScript 1.5, вы можете использовать символы ISO 8859-1 или Unicode (или escape-последовательности \uXXXX Unicode) в идентификаторах». — Machine Elf 1735 ( обсуждение ) 00:18, 17 сентября 2010 г. (UTC)

Редактирование Machine Elf — хорошее начало, но оно не совсем точное. Цифры не ограничены 0-9 — любой символ в категории «Десятичное число (Nd)» Unicode считается цифрой. Кроме того, в идентификаторах разрешено использовать гораздо больше символов/категорий. См. http://mathiasbynens.be/notes/javascript-identifiers .Матиас Байненс: «Идентификатор должен начинаться с $, _ или любого символа в категориях Юникода «Заглавная буква (Lu)», «Строчная буква (Ll)», «Заглавная буква (Lt)», «Буква-модификатор (Lm )», «Другая буква (Lo)» или «Номер буквы (Nl)». Остальная часть строки может содержать те же символы, а также любые символы нулевой ширины U+200C, не объединяющие символы, объединяющие символы нулевой ширины U+200D и символы из категорий Unicode «Знак без пробела (Mn)», «Объединение интервалов». знак (Mc)», «Десятичное число цифр (Nd)» или «Пунктуация разъема (Pc)». Здесь также есть инструмент проверки имени переменной JavaScript: http://mothereff.in/js-variables 78.20.165.163 ( talk ) 11:29, 5 марта 2012 г. (UTC)

Правда и Фальси

«Правда» и «Фальси»… не стесняйтесь найти их источники и рассказать о них что-нибудь.— Machine Elf 1735 ( разговор ) 01:09, 5 марта 2011 (UTC)

Логическая секция

Я предлагаю отредактировать логический раздел, чтобы он был менее запутанным. Я также предлагаю удалить тернарный оператор из раздела, потому что логический контекст искажается как приведение типов, а это не так. Тернарный (?:) оператор не является примером приведения типов, равно как и оператор отрицания "!". Кроме того, на странице сравниваются выражения, а не значения, так как число выражений бесконечно, все ненужные выражения должны быть удалены из раздела для ясности. 72.152.120.17 ( разговор ) 06:36, 6 марта 2011 г. (UTC)

Учитывая, что я удалил такие примеры, как true==trueи false==false..., если вы имеете в виду что-то конкретное, поделитесь, пожалуйста, иначе вы ничего не предлагаете в своем вступительном предложении. Я думаю, что это намного менее запутанно, чем здесь :
// Автоматическое приведение типа // Логические операнды будут преобразованы в число, если возможно, или в строку (если другая строка) alert ( false  ==  false );  // верное оповещение ( false  ==  0 );  // верное оповещение ( false  ==  "0" );  // истинное оповещение ( true  ==  true );  // истинное оповещение ( true  ==  1 );  // истинное оповещение ( true  ==  "1" );  // истинный// Сравнение проверенных типов // Нет преобразования значений alert ( false  ===  false );  // верное оповещение ( false  ===  0 );  // ложное предупреждение ( false  ===  "0" );  // ложное предупреждение ( true  ===  true );  // истинное оповещение ( true  ===  1 );  // ложное предупреждение ( true  ===  "1" );  // ложный

Примеры с «ложными» и «истинными» значениями.

предупреждение ( 3 ? истина : ложь );  // истинное оповещение ( true  ==  3 );  // ложь // 3 является логически истинным (известным как «правда»), как и все не-0 не-нан числа. Однако это не "истинно", даже с приведением типа. предупреждение ( !! ноль  ==  ложь );  // истинное предупреждение ( null  ==  false );  // ложь // Два восклицательных знака преобразуют что-либо в логическое значение в зависимости от того, правдиво оно или нет. Однако автоматическое приведение типов не преобразуется в логические значения. null является ложным, но не "ложным".предупреждение ( false  ==  + 'NaN' );  // false (сокращение для получения значения NaN)
Я думаю, что некоторые перестановки потенциально могут быть устранены, но необходимо показать, например, что ни то, ни другое true==2не false==2ведет себя так, как можно было бы ожидать.
Тернарный оператор явно подходит для обзора логических операций, логических операций и автоматического преобразования. Вы серьезно предлагаете не использовать отрицание?
« Кроме того, страница сравнивает выражения вместо значений... »
Это, очевидно, делает и то, и другое.
Если у вас есть конструктивные предложения по улучшению его четкости, я хотел бы их услышать.— Машинный эльф 1735 ( разговор ) 08:33, 6 марта 2011 г. (UTC)

У вас слишком много примеров, они не демонстрируют важных моментов. Логическому контексту нужен свой раздел, это особенность синтаксиса, а не автоматического приведения типа оператором равенства. «что ни true==2вести false==2себя так, как можно было бы ожидать». Это уже было продемонстрировано. Преобразование типов с помощью ! оператор — это не то же самое, что автоматическое приведение типов. Опять же, эти правки вредят ясности статьи. Каждый аспект был продемонстрирован задолго до редактирования. Было показано приведение типа, а также логический контекст. Каждый в своем отдельном кодовом поле. Давайте не будем смешивать две совершенно разные функции javascript в одном блоке. Это определенно повод для путаницы. 72.152.120.17 ( разговор ) 16:35, 6 марта 2011 г. (UTC)

PS: я могу добавить, что ! оператор относится к разделу «Операторы», а не к логическим. 72.152.120.17 ( разговор ) 16:42, 6 марта 2011 г. (UTC)


Как я уже сказал, я согласен с тем, что некоторые примеры можно исключить. Я просто включил перестановки, потому что это то, что вы сделали ... Излишне, вы более чем в четыре раза увеличили исходные четыре примера: 1 и «0» для каждого.
Вопреки тому, что вы продолжаете повторять, вы не привели пример, который четко демонстрирует поведение логического операнда, автоматически преобразуемого в число для сравнения. Откровенно говоря, термины «истинный» и «ложный» не имели значения, за исключением того, что поведение несколько противоречит интуиции:
При сравнении на равенство (очевидно, не строгом) между логическим значением (с одной стороны) и либо числом, либо строкой (с другой стороны) логический операнд преобразуется в число, а не нелогический операнд преобразуется к булевому. Таким образом, сравнение между логическим значением и любым числом, кроме 0, 1 (и NaN), или любой непустой строкой, которую нельзя преобразовать конкретно в 1 (например, «0», «2», «3»). ..), не будет вести себя последовательно с так называемым «истинным»/«ложным» поведением небулевого операнда в логических контекстах. Например, 2 «истинно» (как в 2?true:false), но ни то, true==2 ни false==2 другое не является истинным, потому что логическое значение автоматически преобразуется в 1, и ни то, 1==2ни другое не 0==2является истинным.
В дополнение к вашим 12 перестановкам автоматического и строгого сравнения вы добавили отдельный блок: «Примеры с «ложными» и «истинными» значениями», сделав своеобразный пример числа 3, а не 2. В строке комментария вы говорите: «3 логически верно (известно как «истина»), как и все числа, отличные от 0, не нан. Однако это не «истинно», даже с приведением типов». [ так в оригинале ]
В логическом контексте 3 всегда "истина". Сравнение не является логическим контекстом. И сравнение с логическим значением не делает его логическим контекстом больше, чем сравнение с числом делает его числовым контекстом или сравнение со строкой делает его строковым контекстом. Когда 3 получает тип, преобразованный (автоматически или явно) в логическое значение, то это всегда true, и никогда false, (независимо от того, отбрасывается ли логическое значение в пользу исходного значения, и поэтому, возможно, не было так много «преобразовано "как "интерпретировать"... просто не в этом дело.)
Если вы говорите, что 3?true:falseэто правда, а true==3это ложь; вы вызываете предположение, что false==3оно верно, но оно также ложно . Так что нет, вы ошибаетесь, когда говорите: «Это уже было продемонстрировано».
Я не собираюсь с вами спорить о том, нужна ли логическому контексту отдельная секция, но мне ясно, что вы не понимаете «автоматического приведения типов оператором равенства».
Ваше предложение не использовать отрицание и тернарные операторы необъяснимо, учитывая, что вы сами использовали тернарный оператор, чтобы продемонстрировать так называемую «правдивость» числа 3, и двойное отрицание, чтобы показать явное (очевидно) преобразование нуля в логическое значение. . Предложение о том, что примеры в разделе Boolean должны исключать эти операторы, просто странное и бесполезное, не так ли?
Приведу пример правки, «вредной для ясности статьи», ваш вводящий в заблуждение комментарий: «сокращение для получения значения NaN». Любая строка, которую нельзя преобразовать в число, приведет к NaN, +"NaN" это не сокращение, NaN это сокращение.

Каждый аспект был продемонстрирован задолго до редактирования. Было показано приведение типа, а также логический контекст. Каждый в своем отдельном кодовом поле. Давайте не будем смешивать две совершенно разные функции javascript в одном блоке. Это определенно повод для путаницы.

Аргумент повторением не является конструктивным. Я думаю, что раздел был в порядке до вашего последнего редактирования. И я думаю, что это демонстрирует преобразование/приведение типов и различные логические контексты... Тем не менее, примеры не пытались решить пограничный случай , который вы указали в своем редактировании.
Вы, кажется, не понимаете вопроса, поэтому ваши примеры вводят в заблуждение. Также ясно, что вы не поняли это из: « Каждый в своем отдельном блоке кода… Давайте не будем смешивать две совершенно разные функции javascript в одном блоке » . Демонстрация строгого и нестрогого сравнения не требует 12 примеров (четырех было более чем достаточно). Пограничный случай - это когда булевы и небулевы операнды используются в нестрогом сравнении, но вы сказали: « Примеры с «ложными» и «истинными» значениями. . _ Теперь, когда вы говорите « продемонстрировали задолго до этого » , я полагаю, вы думаете, что продемонстрировали каждый аспект (и хорошо,если вы сами так говорите), иначе зачем вам увеличивать число примеров более чем в четыре раза, если вы думаете, что каждый аспект уже давно продемонстрирован? Тем не менее, ваше редактирование было не таким уж плохим, жаргон «истинный» / «ложный» хорош, что... Просто вы не можете привести примеры этого без введения.
Раздел посвящен булевым значениям. Как мы все знаем, они тесно связаны с логическими контекстами. Раздел не о преобразовании типов. Этот раздел не посвящен автоматическим и строгим операторам. Этот раздел не о неявных и явных преобразованиях. Если вы перестанете пытаться превратить это во что-то, чем оно не является, я уберу некоторые ненужные перестановки. — Эльф-машина 1735 ( разговор ) 08:53, 7 марта 2011 (UTC)

Старайтесь делать свои посты более компактными. Во-первых: я сказал, что это не «правда», что означает, что это не == правда. Правда не то же самое, что правда. Приведение типа обычно относится к оператору ==, преобразование типа относится к оператору not, логической функции и т. д. Также обратите внимание, что вы добавили большую часть примера. Этот раздел посвящен булевым значениям и их поведению в каждом контексте, в контексте преобразований, равенстве типов и т. д. Дело не в операторе not. 72.152.120.17 ( разговор ) 01:02, 8 марта 2011 г. (UTC)

PS: «Вопреки тому, что вы продолжаете повторять, вы не привели пример, который четко демонстрирует поведение логического операнда, автоматически преобразуемого в число для сравнения». Как насчет "alert(true == 1)"? Мне это кажется хорошим примером. Кажется, вам трудно замечать эти вещи. 72.152.120.17 ( разговор ) 01:04, 8 марта 2011 г. (UTC)

Пример кода функции вводит в заблуждение

вар  obj1  =  { а  :  1 }; переменная obj2 =  { b : 2 } ; функция foo ( p ) { p = obj2 ; // игнорирует фактический параметр p . б = аргументы [ 1 ]; } foo ( obj1 , 3 ); // Никак не влияет на obj1. 3 дополнительный параметр alert ( obj1.a + " " +                   объект2 . б );  // пишет 1 3

Это вводит в заблуждение, потому что obj1 может быть изменен функцией. Довольно странно (в объяснении) передавать параметр функции, а затем игнорировать его. Учитывать:

вар  obj1  =  { а  :  1 }; переменная obj2 =  { b : 2 } ; функция foo ( п ) { п . а = 7 ; // изменяет глобальную переменную obj1 p = obj2 ; // не влияет на obj1, игнорирует фактический параметр p . б = аргументы [ 1 ]; // изменяет глобальную переменную obj2 } foo ( obj1 , 3 );                   // Влияет ли на obj1. 3 — дополнительный параметр alert ( obj1 .a + " " + obj2 .b ) ; // пишет 7 3     

Поскольку параметр объекта передается по ссылке, его можно изменить. Это ИЛИ для меня. Я только учусь. Но я был удивлен, что obj1 можно изменить в функции, pa=7, но p=obj2 не влияет на obj1. Это следует объяснить. QuentinUK ( разговор ) 02:27, 28 июня 2011 (UTC)

Некоторые из примитивных типов данных также предоставляют набор именованных значений, которые представляют экстенты границ типа. Эти именованные значения описаны в соответствующих разделах ниже.

Это длинный способ сказать «ноль, бесконечность, NaN, истина, ложь»? Какие еще существуют граничные значения? QuentinUK ( разговор ) 11:49, 21 июля 2011 г. (UTC)

На ум приходят Number.MIN_VALUE и Number.MAX_VALUE: глобальные свойства Infinity и NaN (такие же, как Number.POSITIVE_INFINITY и Number.NaN, есть также Number.NEGATIVE_INFINITY) немного философские... это специальные значения с конкретными указанными результатами . для сравнений/отливок/расчетов. (Я думаю, что true, false и null являются ключевыми словами, а не глобальными свойствами). Я бы определенно убрал обобщение.— Machine Elf  1735 01:22, 24 июля 2011 (UTC)
Они не упоминаются, поэтому первоначальное утверждение вводит в заблуждение. Также существует диапазон чисел между Number.MAX_VALUE и Number.POSITIVE_INFINITY, «поэтому границы» также вводят в заблуждение. QuentinUK ( разговор ) 03:27, 25 июля 2011 г. (UTC)

Струны

Я видел строки, определенные как

 var приветствия = /Привет, мир!/

что здесь происходит, т.е. почему это не упоминается в статье. QuentinUK ( разговор ) 12:08, 21 июля 2011 г. (UTC)

Это литерал объекта регулярного выражения.— Machine Elf  1735 01:22, 24 июля 2011 г. (UTC).

Разделить логическое значение

Одна проблема с этой статьей в том, что вы не можете прочитать ее от начала до конца. т.е. в разделе Boolean обсуждается оператор == и оператор || и операторы && до того, как они и их странное поведение будут упомянуты.

 // Меня удивило следующее: предупреждение (2 && правда); // истинный оповещение (истина && 2); // 2 // также предупреждение (2 == 2 == 1); // истинный предупреждение (1 == 2 == 2); // ложный // Но если бы сначала были объяснены правила, их бы не было.

QuentinUK ( разговор ) 17:39, 21 июля 2011 г. (UTC)

Я устал возвращать неприятный IP-адрес, который не понимает проблем принуждения. По какой-то причине они были зациклены на разделе о логическом конструкторе, но должны были сосредоточиться на разделах об операторах... сравнение, присваивание, условное, логическое... Machine Elf  1735 01:22, 24 июля 2011 (UTC)

В отличие от C, пробелы в исходном коде JavaScript могут напрямую влиять на семантику.

1) В C пробелы важны для предварительной обработки. 2) В С++ пробелы необходимы для вложенных шаблонов > > иначе это становится >> сдвигом

QuentinUK ( разговор ) 17:20, 21 июля 2011 г. (UTC)

В смысле "как так"? Навскидку, вставка точки с запятой, экранирование разделителей строк в строковых литералах, случайные метки порядка следования байтов... js не нормализует эквиваленты Unicode, строки — это просто множество 16-битных целых чисел без знака.— Machine Elf  1735 01:22, 24 июля 2011 г. (УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ)
В этом отношении он мало чем отличается от C. Поэтому утверждение, что он не похож на C, неверно. QuentinUK ( разговор ) 03:18, 25 июля 2011 г. (UTC)
Я не знаю JavaScript, я видел некоторый код с некоторыми строками, начинающимися с точки с запятой, я неправильно интерпретировал это как комментарий к строке, такой как // в C++, потому что другие языки, такие как некоторые ассемблеры и Лисп, рассматривают точку с запятой как комментарий к строке.
Из этой статьи я узнал, что JavaScript имеет неоднозначный синтаксис в этом отношении.
Синтаксическая двусмысленность должна быть разделом в статье, хотя я думаю, что всю статью следует переписать, сосредоточив внимание на синтаксисе языка.

Строгая равно транзитивность

Следующее

alert (  ! 0  ===  Boolean (  ! 0  )  ===  !! 1  ===  Boolean (  1  )  ===  true  ); предупреждение (  !! 0  ===  логическое значение (  0  )  ===  ! 1  ===  логическое значение (  ! 1  )  ===  false  ); предупреждение (  ! ""  ===  логическое значение (  ! ""  )  ===  !! "s" ===  Boolean (  "s"  )  ===  true  ); alert (  !! ""  ===  Boolean (  ""  )  ===  ! "s"  ===  Boolean (  ! "s"  )  ===  false  );

Создается впечатление, что равенство можно связать вместе. A===B===C верно, когда все они равны, это не так. QuentinUK ( разговор ) 10:57, 11 августа 2011 г. (UTC)

Объявление переменной

В разделе «Переменная» не должно быть ни слова об использовании ключевого слова var ? Что происходит, когда вы его используете? Что происходит, когда вы этого не делаете?

Кроме того, раздел о точках с запятой читается как личный блог и содержит ссылку на внешний блог. -- Тим Сабин ( разговор ) 17:58, 13 апреля 2012 г. (UTC)

Примеры присвоения -- примитивные типы

Примеры для -= и /= (сокращение от некоммутативных операций) в настоящее время не позволяют читателю сделать вывод о порядке операций. Если мы начнем с x=3, неясно, почему результат x /= 3 равен 1. Было ли это связано с тем, что x было разделено на 3, или потому что 3 было разделено на x? По этой причине я изменяю числовые значения в примере последовательности. Оценщик ( разговор ) 22:42, 15 ноября 2012 г. (UTC)

Тестирование на `undefined`

Если кто-то не увидит в этом проблемы, я добавлю это к способу проверки специального значения `undefined`:

 функция isUndefined (о) { return ((typeof o) === "undefined"); }

Кажется, в документе отсутствует способ использования `typeof`. -- Hibou57 ( разговор ) 19:25, 18 июля 2013 г. (UTC)

Не упоминает «оператор распространения» ES6:...

MDN и MSDN говорят об операторе распространения, написанном "...", и он не рассматривается здесь или в других местах, которые я смог найти в Википедии о JS или ES6. С другой стороны, мне сказали, что, хотя основные источники JS вызывают ... оператора , технически это может быть не оператор. — Хиппитрейл ( обсуждение ) 06:08, 27 января 2016 г. (UTC)

Я попытался создать раздел об операторе распространения/остатка " ... ". Я поместил его в раздел об операторах, хотя теперь, когда я об этом думаю, вероятно, это правда, что это не "оператор" в строгом смысле. Это больше похоже на синтаксическую пунктуацию, аналогичную "[]", "{}", запятым и точкам с запятой. В этом случае остальные параметры, возможно, следует переместить в раздел функций, а синтаксис расширения следует переместить в раздел массивов (и, возможно, также упомянуть в разделе функций). -- 2404:130:0:1000:102E:358C:1F00:94A4 ( разговор ) 06:48, 29 сентября 2016 г. (UTC)

Обслуживание и рейтинг статей JavaScript

Что касается редактирования и поддержки статей, связанных с JavaScript...

Сотрудничество...

Если вы заинтересованы в совместной работе над статьями по JavaScript или хотели бы узнать, где вы можете помочь, зайдите на сайт Wikipedia:WikiProject JavaScript и не стесняйтесь добавлять свое имя в список участников. Приветствуются как редакторы, так и программисты.

Где размещать статьи о JavaScript

На данный момент мы нашли более 300 статей, связанных с JavaScript . Если вы встретите какие-либо другие, пожалуйста, добавьте их в этот список.

Пользовательские скрипты

WikiProject также берет на себя организацию страниц поддержки пользовательских сценариев сообщества Википедии. Если вы заинтересованы в том, чтобы помочь организовать информацию о пользовательских сценариях (или вам интересно, чем мы занимаемся), дайте нам знать !

Если вам нужен пользовательский скрипт, которого еще нет, или у вас есть классная идея для пользовательского скрипта или гаджета, вы можете опубликовать ее в Википедии: Пользовательские скрипты/Запросы . А если вы программист JavaScript, это отличное место, где можно найти задания, если вам скучно.

Как сообщить о статьях JavaScript, требующих внимания

Если вы столкнулись со статьей о JavaScript, которая отчаянно нуждается во внимании редактора и справиться с которой вы не в состоянии, вы можете добавить ее в наш список статей, связанных с JavaScript, которые требуют внимания .

Рейтинг статей JavaScript

В верхней части страницы обсуждения почти каждой статьи, связанной с JavaScript, находится JavaScript-шаблон WikiProject, где вы можете указать класс качества и важность статьи. Это поможет сообществу отслеживать этап завершения и более внимательно следить за статьями с наивысшим приоритетом.

Спасибо. Трансгуманист 01:10, 12 апреля 2017 г. (UTC)

Комментарии Пожалуйста

Я думал, что комментарии к примерам были очень хорошими, вплоть до последнего примера в сеансе функций и нескольких в разделе объектов. Не имея возможности устанавливать точки останова для следования логике, у меня возникли проблемы с пониманием того, что хотел продемонстрировать автор.

Я не знаю, широко ли распространено мое мнение, потому что я самоучка и, возможно, упустил некоторые подразумеваемые моменты. В противном случае, я думал, что это было хорошо сделано. The Source Whisperer ( обсуждение ) 03:58, 6 мая 2019 г. (UTC)

С заявлением, указанным в перенаправлениях для обсуждения

Редактор попросил об обсуждении вопроса о перенаправлении с заявлением . Пожалуйста, примите участие в обсуждении перенаправления , если хотите. — Артур Рубин (разговор) 10:56, 19 мая 2019 г. (UTC)

Это не синтаксис JavaScript , это очень длинное описание языка.

Синтаксис языка программирования — это набор правил грамматики, которые создают любую правильно написанную программу на данном языке. т.е. программа, которую компилятор/интерпретатор может анализировать (парсить) для перевода.

Это не означает, что грамматика создает код без «ошибок», vgr. for(i=m; i<n; 0++)является синтаксически правильным, хотя очевидно бессмысленным, поскольку эта программа никогда не останавливается. Правило ограничения и соответствующее приращение, которое сделает false для завершения цикла, являются семантическими, а не синтаксическими . i<n

Такие правила обычно описываются с помощью грамматик БНФ или синтаксических диаграмм .

Статья может также включать семантическое описание каждой программной конструкции. (Полуформальный или формальный, если он есть.)

Я не знаю JavaScript, но я не кажусь таким монстром, как C++ с примерно 300 ключевыми словами. Кажется, он намного меньше, о чем можно рассказать в более короткой статье.

Я согласен, что эта статья слишком длинная, но решение не в том, чтобы фрагментировать ее. Вместо этого следует написать тот, который соответствует тому, что в заголовке говорится о синтаксисе JavaScript , или тот, который включает семантику и переименовывает его в синтаксис и семантику JavaScript .

Статья должна начинаться с описания атомарных элементов, таких как список ключевых слов, допустимые переменные и другие определяемые пользователем имена, синтаксис чисел и все, что играет роль слов в предложении. Затем правило, описывающее программу, за которым следует каждая конструкция программы. Поскольку я не знаю JavaScript, я не могу сказать что-то более корректное. Воспринимайте это как общее руководство для добровольцев, принявших на себя эту миссию.

Источником информации может быть стандартное руководство по языку, если оно существует, поэтому не ждите сотен ссылок. Просто список руководств, описывающих эволюцию языка, потому что одни конструкции появились с первой версии, другие — в более поздних. Было бы нелепо помечать такую ​​статью, призывая к большему количеству ссылок. Это простая задача для опытного программиста JavaScript с некоторым формальным образованием в области ИТ. Элиас ( разговор ) 06:56, 25 декабря 2019 г. (UTC)

@ Элиас : . Большой палец вверх. Согласен, статью надо сократить. Так же предлагаю вынести примеры в отдельный.
[...] Статья также может включать семантическое описание [..] Это было бы катастрофой для статьи, поскольку спецификации содержат много (я имею в виду МНОГО) сложных определений IDL для очень простых языковых конструкций. Я выступаю за то, чтобы приводить простые примеры, избегая излишней академичности/специфичности статьи. AXO NOV (обсуждение) ⚑ 08:35, 13 октября 2020 г. (UTC)

Синтаксис модуля

Синтаксис модуля, который является самой базовой вещью каждого интерпретатора JS, отсутствует. Я предлагаю сделать раздел о том, как модульная система работает в разных реализациях, таких как браузер/сервер (например, Google Chrome/Node.js). Я предлагаю не делать его раздутым, чтобы решить проблему, указанную Элиасом . AXO NOV (обсуждение) ⚑ 08:35, 13 октября 2020 г. (UTC)

Получено с https://en.wikipedia.org/w/index.php?title=Talk:JavaScript_syntax&oldid=1037256437 "