Пожалуйста, объясните это использование двоеточия в javascript
Я создаю библиотеку, и я часто проверяю результат вывода компилятора закрытия, чтобы увидеть, как он это делает (у меня есть модульные тесты, но мне все еще нравится видеть скомпилированный код для подсказок о том, как он может сжиматься лучше).
Итак, я нашел этот очень странный кусок кода, который я никогда раньше не видел.
variable : {
some();
code()
}
Примечание:не литерал объекта! кроме того, нет ?
в любом месте, что бы сделать это a ?:
условно.
этот код находится в обычном функциональном блоке (an жизнь).
variable
в данном случае является неопределенной переменной. нет кода, делающего его истинным, ложным или что-то еще и просто чтобы убедиться, я поставил console.log
там и в самом деле, я получаю ReferenceError
.
обратите внимание, что я тестирую свой код в IE8 тоже, так что это не только в современных браузерах. Это кажется стандартным, простым старый javascript.
Итак, давайте поэкспериментируем с ним. Запуск консоли Chrome, я получаю это:
undeclaredVariable:{console.log('does this get logged?')} // yes it does.
trueValue:{console.log('what about this?')} // same thing.
falseValue:{console.log('and this?')} // same thing.
но потом...
(true):{console.log('does this work too?')} // SyntaxError: Unexpected token :
...и...
so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token .
так что же делать?
thisThing:{console.log('is used to declare a variable?')}
thisThing // ReferenceError: thisThing is not defined
пожалуйста, я бы хотел, чтобы кто-нибудь объяснил мне, что этот код должен делать или, по крайней мере, что он делает.
5 ответов
Это метка
предоставляет инструкцию с идентификатором, на который можно ссылаться с помощью перерыв или продолжить заявление.
например, можно использовать метку для идентификации цикла, а затем использовать инструкции break или continue указывают, должна ли программа прервать цикл или продолжить его выполнение.
еще одно общее место, которое вы видите, когда люди придерживаются замечательного и бесполезного javascript:
на обработчик событий.
Это метка (бит, заканчивающийся двоеточием), за которым следует блок (код, окруженный фигурными скобками).
блоки обычно следуйте инструкциям управления, например if(...) { /*block*/ }
, но они также могут просто стоять самостоятельно, как в вашем примере.
метки разрешить подпрыгивать несколько петель одновременно с continue
или break
; см. связанную страницу MDN для нескольких примеров, таких как as:
var itemsPassed = 0;
var i, j;
top:
for (i = 0; i < items.length; i++){
for (j = 0; j < tests.length; j++)
if (!tests[j].pass(items[i]))
continue top;
itemsPassed++;
}
здесь top:
- это метка, к которой может перейти код внутри внутреннего цикла, чтобы перейти к внешнему циклу.
для тех, кто не знает, что такое JSON, и видит двоеточие в том, что на самом деле может быть объектом, и пытается выяснить, что это такое, и находит это обсуждение, двоеточие также используется в JSON. Существует практика встраивания функций в объект JSON. Что может смутить (как и для меня) любого, кто видит это в первый раз. (Не все рождаются со знаниями JSON и JavaScript, запрограммированными в их мозгу.) Так что если вы окажетесь в это Обсуждение, и вы думаете, что каждый раз, когда вы видите двоеточие в JavaScript, что это метка, это может быть не так. Возможно, это двоеточие после метки, или это может быть часть JSON. На самом деле двоеточие в JSON отображается как строка, гораздо чаще, чем метка. JSON в виде объекта, будет отображаться как [object Object]
, со всем скрытым содержимым. Итак, если JSON не находится в виде строки, и вы отображаете объект на консоли (console.log (object)) все, что вы увидите, это [object Object]
. Это обычная практика, чтобы написать код JavaScript, завернутый в объект. В этом случае вы увидите JSON в виде кода. Тогда вы спросите себя: "что это? и что это за кишечника?"Тогда вы окажетесь на этом обсуждении, и вам скажут, что это ярлык, когда он действительно является частью JSON. Тема этого обсуждения сформулирована: "пожалуйста, объясните это использование двоеточия в javascript", а затем" правильный ответ " отмечен как имеющий отношение к метке. Этот правильный ответ заключается в том, что двоеточие можно использовать более чем одним способом. Итак, если вы не знаете, что такое JSON, или думаете, что знаете (как я, но на самом деле не понял), прочитайте об этом здесь:
JSON.org
это просто label
.
можно использовать continue [label name]
(или break
) в цикле перейти к метке.
больше объяснений того, что они собой представляют, можно увидеть во всех паутинах.
Он используется для маркировки оператора в jsvascript.проверьте более подробно здесь.
помеченный оператор может использоваться с break
и continue
позже.