Действительно ли JavaScript является нетипизированным языком?

Если вы хотите добавить другой реестр после того, как ваша докер-машина уже создана, вам нужно будет отредактировать файл конфигурации: vim ~ / .docker / machine / machines / dev / config.json

Объясняется здесь: https://akrambenaissi.com/2015/11/17/addingediting-insecure-registry-to-docker-machine-afterwards/

95
задан Deniz Dogan 8 June 2009 в 13:25
поделиться

5 ответов

strong / weak можно рассматривать в связи с тем, как компилятор, если применимо, обрабатывает типизацию.

  • Слабо типизированный означает, что компилятор, если применимо, не обеспечивает правильную типизацию . Без неявной вставки компилятора инструкция выдаст ошибку во время выполнения.

     "12345" * 1 === 12345 // строка * число => число
    

    Строго типизированный означает, что существует компилятор, и он хочет, чтобы вы явно преобразовали строку в целое число .

     (int) "12345" * 1 = == 12345
    

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

    На данный момент JavaScript можно отнести к категории Not- Сильно типизированный. Это либо означает, что он является слабо типизированным или нетипизированным.

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

  • Динамически типизированный означает ] value является принудительным, но переменная просто представляет любое значение любого типа.

     x = 12345; // число
    x = "строка"; // строка
    x = {ключ: "значение"}; // объект
    у = 123 + х; // должна иметь место ошибка или неявное преобразование.
    

    Статически типизированный означает строгое соблюдение типа переменной , а тип значения - менее строгого.

     int x = 12345; // привязывает x к типу int
    x = "строка"; // поздно, x целое число - ошибка
    строка y = 123; // должна иметь место ошибка или неявное преобразование.
    

    На данный момент JavaScript можно отнести к категории нестатически типизированных. Кроме того, он выглядит динамически типизированным, если вообще набирается. Итак, нам нужно увидеть, что означает «Типизация».

Типизированный означает, что язык различает разные типы, такие как строка , число , логическое , объект , массив , null , undefined и так далее. Также каждая операция привязана к определенным типам. Таким образом, вы не можете разделить целое число на строку .

    2 / "blah"  // produces NaN

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

    2 / "blah"  // will be treated as  2 / 1500275048

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

Если кто-то утверждает, что JavaScript не типизирован, то это просто для академической теории, а не для практического применения.

79
ответ дан 24 November 2019 в 05:44
поделиться

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

Имейте в виду, что JavaScript также динамически типизирован. Этот метод набора текста позволяет так называемый «утиный ввод» .

Для сравнения учтите, что JavaScript не строго типизирован и не статически типизирован. Иногда понимание того, чем не является , может помочь вам лучше понять, что это такое.

45
ответ дан 24 November 2019 в 05:44
поделиться

По мнению автора, JavaScript также классифицируется как Динамически типизированный . Wiki утверждает, что языки с динамической типизацией проверяются типом во время выполнения, а не в компиляторе, в то время как слабая типизация относится к возможности изменять тип на лету в вашем коде. Так что да, это как динамически, так и слабо типизированные.

8
ответ дан 24 November 2019 в 05:44
поделиться

Помните, что JavaScript позволяет вам спрашивать, что такое typeof (your_variable) , и сравнивать типы: 5 === «5» возвращает ложь . Таким образом, я не думаю, что вы можете назвать его нетипизированным.

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

1
ответ дан 24 November 2019 в 05:44
поделиться

Пока он набран (вы можете спросить "typeof someVar" и узнать его конкретный тип, он очень слабый.

Учитывая:

  var a = "5";

вы можете сказать, что a - это строка. Однако , если вы затем напишете:

  var b = a + 10;

b - это int, равное 15, поэтому a действует так же, как int. Конечно, вы можете написать:

  var c = a + "Hello World";

и c будет равно "5Hello World", поэтому a снова действует как струна.

1
ответ дан 24 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

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