Использование скобок в JavaScript [дубликат]

Вам вряд ли удастся выполнить это с помощью JavaScriptSerializer.

Попробуйте JSON.Net .

С незначительными изменениями из примера JSON.Net

using System;
using Newtonsoft.Json;

namespace JsonPrettyPrint
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Product product = new Product
                {
                    Name = "Apple",
                    Expiry = new DateTime(2008, 12, 28),
                    Price = 3.99M,
                    Sizes = new[] { "Small", "Medium", "Large" }
                };

            string json = JsonConvert.SerializeObject(product, Formatting.Indented);
            Console.WriteLine(json);

            Product deserializedProduct = JsonConvert.DeserializeObject(json);
        }
    }

    internal class Product
    {
        public String[] Sizes { get; set; }
        public decimal Price { get; set; }
        public DateTime Expiry { get; set; }
        public string Name { get; set; }
    }
}

Результаты

{
  "Sizes": [
    "Small",
    "Medium",
    "Large"
  ],
  "Price": 3.99,
  "Expiry": "\/Date(1230447600000-0700)\/",
  "Name": "Apple"
}

Документация: Сериализация объекта

68
задан 22 revs, 8 users 80% 27 January 2016 в 22:46
поделиться

5 ответов

Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда.

Источник: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator

Например, выражение 1,2,3,4,5 имеет значение 5. Очевидно, что оператор запятой полезен только для операций с побочными эффектами.

68
ответ дан Yuval Adam 20 August 2018 в 16:48
поделиться
  • 1
    Они взяли это у C. Я думаю, что это полезно только для выражений, которые имеют побочные эффекты. – Radomir Dopieralski 24 August 2010 в 22:11
  • 2
    @Randomir - правильно, спасибо. – Yuval Adam 24 August 2010 в 22:12
  • 3
    Я не могу придумать много случаев, когда оператор запятой используется для любого воздействия, но сохраняющий символы (минирование) или обфускацию кода. – user17753 30 January 2013 в 23:55
  • 4
    @ user17753 его можно использовать законно в секции, разделенной точкой с запятой, в цикле for. – Cyoce 24 March 2017 в 08:33
  • 5
    @Cyoce: Хотя это правда, говоря вообще, такая логика более четко выполняется в теле цикла. Некоторые люди утверждают, что их путь позволяет использовать несколько continue точек без дублирования, но тогда вы не должны иметь несколько continue точек. – Lightness Races in Orbit 21 March 2018 в 13:15

Добавление / изменение свойств объекта и его возврат в одну строку - это возможный случай использования:

console.log(
  ((x) => (o = {biggerCond: r => r >= x},
           o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
           o.isAnyBigger = o.r5.some(o.biggerCond),
           o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
  )(5e4)
);
// Example
// {
//   bigger: [58414, 56500, 63397],
//   isAnyBigger: true,
//   isBiggerCond: r => r >= x,
//   r5: [58414, 12015, 56500, 63397, 43861]
// }

Вышеуказанное анонимная функция возвращает объект со случайными значениями, превышающими входное значение, или, если их нет, с самим входным значением в массиве, содержащимся в свойстве bigger.

Это все еще синтаксический сахар (например, функции стрелок ), но это сокращает количество строк ... Интересно, обнаруживают ли некоторые JS-министры и автоматически корректируют код аналогичным образом. Запустите его в консоли:

((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)
0
ответ дан CPHPython 20 August 2018 в 16:48
поделиться
  • 1
    Но, конечно, вы не ставили такие загадочные заклинания в производственный код, верно? – Lightness Races in Orbit 21 March 2018 в 13:16
  • 2
    @LightnessRacesinOrbit хорошо, я скажу, что это зависит от цели (например, обучения, сокращения кода, никаких объявлений переменных / функций и т. Д.). Если вы отступаете так, как я делал выше, он отлично читается ... Нельзя перестать замечать, что вы использовали слово «криптический». :) – CPHPython 21 March 2018 в 13:21
  • 3
    Хех, это даже не было преднамеренным – Lightness Races in Orbit 21 March 2018 в 13:23

Еще несколько предупреждений:

alert((0, 9));
alert((9, 0));
alert(("foo", "bar"));

Кроме того, посмотрите, что Firebug console , если вы хотите попробовать это в интерактивном режиме.

5
ответ дан Douglas 20 August 2018 в 16:48
поделиться
  • 1
    Lol, это весело: alert("1", alert("2", alert("3"))) – Topera 24 August 2010 в 23:09
  • 2
    во всех случаях используется только первый аргумент. Я бы предположил, что вы ожидаете, что то же самое произойдет в вашем собственном коде (если у вас есть функция, которая приняла один аргумент, но затем предоставила ему два). И @Topera, ваш код демонстрирует, что когда вы передаете функцию / метод в качестве аргумента, он будет сразу оцениваться, даже если он не используется. – Andrew 25 August 2010 в 02:50
  • 3
    @Andrew: Ой, я обновил свой ответ тем, что я хотел использовать. – Douglas 25 August 2010 в 09:44
  • 4
    Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение операнда last. – xgqfrms 15 June 2017 в 16:30

Посмотрите здесь - запятая обозначает несколько выражений / операторов. Например, в вашем коде вы можете использовать такую ​​строку:

var a=0, b=0, c=0;

Это объявило бы все три переменные без записи:

var a=0;
var b=0;
var c=0;

Надеюсь, что это поможет.

4
ответ дан Drew Gaynor 20 August 2018 в 16:48
поделиться
  • 1
    Это немного устарело, но важно отметить: (1) предоставленный вами пример не использует оператор запятой (var объявления не используют запятую operator , хотя это запятая ) и (2) вы не можете разделять записи с помощью операторов запятой; допускаются только выражения. – Qantas 94 Heavy 26 April 2014 в 10:49
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение операнда second.

https://stackoverflow.com/a/3561056/5934465

Это должно быть так!

Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение операнда last.

https: //developer.mozilla .org / EN-US / Docs / Web / JavaScript / Справочник / Операторы / Comma_Operator

2
ответ дан xgqfrms 20 August 2018 в 16:48
поделиться
  • 1
    Оператор запятой принимает операнды two , поэтому исходная цитата была правильной. То, о чем вы говорите, является конечным результатом вложенности таких выражений, но это означает, что ваша запасная цитата тонко искажена. a,b,c,d - ((((a),b),c),d) – Lightness Races in Orbit 21 March 2018 в 13:16
Другие вопросы по тегам:

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