Что делает ':' (двоеточие) в JavaScript?

Я изучаю JavaScript и, просматривая библиотеку jQuery, вижу, что : (двоеточие) часто используется. Для чего это используется в JavaScript?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
187
0
158 503
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий
var o = {
    r: 'some value',
    t: 'some other value'
};

функционально эквивалентен

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

Так похож на синтаксис инициализатора объекта C#. Спасибо!

Micah 07.01.2009 03:56

Что делать, если ограждающего объекта нет?

theonlygusti 26.11.2014 19:56

@ FranciscI.B, если бы мне пришлось догадаться, я думаю, что это TypeScript, который является расширенным набором JavaScript. Он объявляет класс с переменной xMin с типом float. Довольно сюрприз, вот что это значит.

Sal_Vader_808 14.05.2017 14:08

Это JSON или объектная нотация JavaScript. Это быстрый способ описания объекта или хэш-карты. Вещь перед двоеточием - это имя свойства, а вещь после двоеточия - его значение. Итак, в этом примере есть свойство «r», значение которого равно значению переменной r. То же для т.

JSON - это только подмножество синтаксиса инициализации объекта JavaScript. '{a: k ()}', где k - функция, не является JSON, но это прекрасный синтаксис инициализации объекта JavaScript.

yfeldblum 07.01.2009 03:59

Чтобы быть педантичным, нет, это не JSON. Это выглядит, как JSON. Это синтаксис литерала объекта, который является родным для JavaScript и может появляться непосредственно внутри кода. С другой стороны, JSON - это формат сериализации / обмена данными. JSON является JSON только тогда, когда он «находится в воздухе», то есть в пути или когда он еще не преобразован в реальный объект.

Ates Goral 29.10.2009 06:10

+1 для Атеса Горала, но обратите внимание, что данный пример даже не смотрю, как JSON: имена должны быть в двойных кавычках, чтобы он был действительным синтаксисом JSON.

NickFitz 29.10.2009 17:03

Это часть синтаксиса литерала объекта. Базовый формат:

var obj = { field_name: "field value", other_field: 42 };

Затем вы можете получить доступ к этим значениям с помощью:

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"

Вы даже можете иметь функции как значения, в основном предоставляя вам методы объекта:

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9

Отлично, потому что это дало мне термин, по которому я мог искать и получать дополнительную информацию.

johnny 09.05.2014 20:24

':' В основном является разделителем для пар "ключ-значение". В вашем примере это обозначение литерала объекта Javascript.

В javascript объекты определяются двоеточием, разделяющим идентификатор свойства и его значение, поэтому вы можете иметь следующее:

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

а затем используйте его как:

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"

Подмножество этого также известно как JSON (Javascript Object Notation), которое полезно в вызовах AJAX, поскольку оно компактно и быстро анализируется на серверных языках, а Javascript может легко десериализовать строку JSON в объект.

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');

Вы также можете поместить ключ в кавычки, если он содержит какой-то специальный символ или пробелы, но я бы не рекомендовал это, потому что это просто усложняет работу.

Имейте в виду, что Обозначение объекта JavaScript Буквальный в языке JavaScript отличается от стандарта JSON для передачи сообщений. Основное различие между этими двумя состоит в том, что функции и конструкторы не являются частью Стандарт JSON, но разрешены в литералах объектов JS.

Когда я прочитал ваш ответ, я подумал, что проголосую за него, но потом вы сказали, что «Он также известен как JSON». Объектные литералы и JSON определенно являются нет одним и тем же, действительно, ваши примеры до того, как вы упомянули JSON, недействительны JSON.

nnnnnn 29.06.2011 03:25

@nnnnnn Разница между этими двумя очень тонкая, но, тем не менее, важная. Я обновил свой ответ, чтобы быть более конкретным по этому поводу.

Dan Herbert 29.06.2011 19:58

Вижу обновление. Хороший. Обратите внимание, что в JSON требует имена ключей заключены в кавычки.

nnnnnn 30.06.2011 04:07

Почему вы должны упомянуть все это дважды? Когда вы сказали "а потом используйте это как"

Harsha 22.04.2017 21:29

Вы, ребята, забываете, что двоеточие также используется в тернарном операторе (хотя я не знаю, использует ли его jquery для этой цели).

тернарный оператор - это форма выражения (выражения возвращают значение) оператора if / then. он используется так:

var result = (condition) ? (value1) : (value2) ;

Тернарный оператор также может использоваться для создания побочных эффектов, как если бы / тогда, но это в корне плохая практика.

AKA «тернарный оператор». Обратите внимание, что OP строго спрашивает о буквальном регистре объекта. Если мы пойдем даже дальше того, что запрашивает OP, двоеточие также используется в ярлыках.

Ates Goral 29.10.2009 06:06

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

Breton 29.10.2009 16:59

Было бы здорово увидеть, как он используется для ярлыков и всего остального, поэтому использование никогда не сбивается с толку @AtesGoral, потому что я сейчас все еще гуглию их.

Shane 03.01.2014 10:40

Может быть, было бы проще перечислить то, для чего: не используется в Javascript.

kingfrito_5005 28.07.2015 20:52

Кроме того, для обозначения оператора можно использовать двоеточие. Например

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if (j>50) {
     break outerloop;
   }
  }
i++

}

Добро пожаловать в Spaghetti Code :)

Leo The Four 08.04.2016 18:07

Goto нельзя замаскировать: вы просто прерываете goto; и вы его нашли! ;)

Andrew 03.05.2017 19:17

Справочная страница MDN для ярлыка JS: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Peter 13.03.2018 22:56

да, вот почему a => {b: 2} не будет бросать и возвращать undefined

Pavlo D 24.02.2020 21:23

Не забываем оператор switch, в котором двоеточие ставится после каждого «case».

Его можно использовать для перечисления объектов в переменной. Кроме того, он немного используется в сокращении предложения if:

var something = {face: 'hello',man: 'hey',go: 'sup'};

И называя это так

alert(something.man);

Также предложение if:

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}

Обычно это сценарии, в которых двоеточие ':' используется в JavaScript.

1- Объявление и инициализация объекта

var Car = {model:"2015", color:"blue"}; //car object with model and color properties

2- Установка метки (не рекомендуется, так как это приводит к сложной структуре управления и коду спагетти)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if (userInput > 10000)
     {
          break List;
     }
}

3- В заявлении Switch

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}

4- Тернарный оператор

document.getElementById("demo").innerHTML = age>18? "True" : "False";

Одно двоеточие также может использоваться для оценки короткого замыкания вместо ||. Пример: var a = false, b = a || 'Default value'; эквивалентен var a = false, b = a : 'Default value';

Shaun Cockerill 23.01.2018 06:04

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

Имейте в виду, что если вы используете ":" в подобном событии, значение не изменится.

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });

Таким образом, «nub0x» инициализируется первым происходящим событием и никогда не изменит своего значения. Но "nub0y" изменится в следующих ивентах.

Я наткнулся на это, и, к сожалению, на самом деле здесь происходит то, что вы используете ярлык перед своим утверждением. Присваивания не производится, но оператор event.target.offsetLeft + event.target.clientWidth/2; запускается каждый раз, когда вызывается ваш метод ondrag, но никогда не присваивает значение nub0x.

kketch 03.02.2017 13:20

На самом деле это используется в качестве оценки, и : рассматривается как ||. Следовательно, event.target.offsetLeft + event.target.clientWidth/2; будет срабатывать только каждый раз, если nub0x приравнивается к false.

Shaun Cockerill 23.01.2018 06:11

Еще одно использование двоеточия в JavaScript - переименование переменной, а именно:

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
let { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";

Это полезно, если вы используете стороннюю библиотеку, которая возвращает значения с неудобными / длинными именами переменных, которые вы хотите переименовать в своем коде.

Другие вопросы по теме