я пытаюсь войти в ASP.NET Identity от реагировать JS с помощью Axios

Позвольте мне добавить этот совет:

Если вы сомневаетесь, прочитайте спецификацию !

ECMA-262 - это спецификация языка сценариев, на котором JavaScript является диалектом. Конечно, на практике важно, как ведут себя самые важные браузеры, чем эзотерическое определение того, как что-то должно обрабатываться. Но полезно понять, почему новый String («a»)! == «a».

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

Поиск файла PDF для === приводит меня на страницу 56 спецификации: 11.9.4. Оператор Strict Equals (===), и после прохождения через спецификацию я нахожу:

11.9.6 Алгоритм сравнения строгих равенств Сравнение x === y, где x и y являются значения, возвращает true или false. Такое сравнение выполняется следующим образом: & nbsp; 1. Если Type (x) отличается от Type (y), верните false. & NBSP; & NBSP; 2. Если Type (x) Undefined, верните true. & NBSP; & NBSP; 3. Если Type (x) - Null, верните true. & NBSP; & NBSP; 4. Если Type (x) не является числом, перейдите к шагу 11. & nbsp; & nbsp; 5. Если x является NaN, верните false. & NBSP; & NBSP; 6. Если y является NaN, верните false. & NBSP; & NBSP; 7. Если x - это то же числовое значение, что и y, верните true. & NBSP; & NBSP; 8. Если x равно +0, а y равно -0, верните true. & NBSP; & NBSP; 9. Если x равно -0 и y равно +0, верните true. & NBSP; & NBSP; 10. Вернуть false. & NBSP; & NBSP; 11. Если Type (x) - String, то верните true, если x и y - это точно такая же последовательность символов (одинаковая длина и одинаковые символы в соответствующих позициях); в противном случае верните false. & NBSP; & NBSP; 12. Если Type (x) является логическим, верните true, если x и y оба true или оба false; в противном случае верните false. & NBSP; & NBSP; 13. Верните true, если x и y относятся к одному и тому же объекту или относятся к объектам, соединенным друг с другом (см. 13.1.2). В противном случае верните false.

Интересным является этап 11. Да, строки рассматриваются как типы значений. Но это не объясняет, почему новый String («a»)! == «a».

Не так быстро!

Давайте проверим типы операндов. Попробуйте сами, обернув их в typeof (). Я обнаружил, что новый String («a») является объектом, и используется шаг 1: return false, если типы разные.

Если вам интересно, почему новая строка («a») не возвращает строка, как насчет некоторых упражнений, читающих спецификацию? Получите удовольствие!


Aidiakapi написал это в комментарии ниже:

Из спецификации

11.2.2 Новый оператор:

Если тип (конструктор) не является объектом, вызовите исключение TypeError.

Другими словами, если String не будет иметь тип Object, он не может использоваться с новым оператором.

new всегда возвращает объект, даже для конструкторов String. И увы! Семантика значения для строк (см. Шаг 11) потеряна.

И это, наконец, означает: новый String ("a")! == "a".

-1
задан tomerpacific 24 March 2019 в 07:44
поделиться

1 ответ

Я совершил небольшую ошибку. Тип контента был закодирован в URL, но я отправлял данные JSON. Спасибо @ADyson, который идентифицировал isue.

Вот правильный код.

var data = this.state;
    var bodyData =
      "username=" +
      data.username +
      "&password=" +
      data.password +
      "&grant_type=password";
    const response = axios({
      url: "http://localhost:56885/Token",
      method: "post",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
      },
      data: bodyData
    });
    console.log(response);
0
ответ дан Xain Asghar 24 March 2019 в 07:44
поделиться
Другие вопросы по тегам:

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