Вниз  Зона фронтенда
- 23.12.2015 / 14:19
Oak
  Пользователь

Oak 
Сейчас: Offline
Цитата REM!:
Не путаешь ли ты JS с PHP? Сравнение в JS ведёт себя вполне нормально. С округлением есть проблемы, с typeof есть проблемы, это да.
  1. function sayHi(x) {
  2.       if (!x)
  3.         return console.log('Bye');
  4.       console.log('Hi');
  5.     }
  6.     //What will this print?
  7.     sayHi(false);
  8.     sayHi(null);
  9.     sayHi([]);
  10.     sayHi(new Boolean(false));

  1. var a = {
  2.       valueOf: function () {
  3.         return "2";
  4.       }
  5.     };
  6.     console.log(1 == '1'); // #=> true
  7.     console.log(1 == true); // #=> true
  8.     console.log(0 == ''); // #=> true
  9.     console.log(null == null); // #=> true
  10.     console.log(null == undefined); // #=> true
  11.     console.log(null == ''); // #=> false
  12.     console.log(null == 0); // #=> false
  13.     console.log(NaN == NaN); // #=> false
  14.     console.log(a == 2); // #=> true
  15.     console.log(a == true); // #=> false
  16.     console.log(a == false); // #=> false

__________________
 Эль Презеденте

Изменено Oak (23.12 / 14:27) (всего 2 раза)
- 23.12.2015 / 14:21
Oak
  Пользователь

Oak 
Сейчас: Offline
Цитата NaruTrey:
Не думаю, что это понятие здесь применимо.
Нет, серьезно. Никогда не слышал про написание фронтенда к LLVM? Грубо говоря, это написание лексера, парсера и транслятора в IR LLVM, чтобы тот его после скомпилировал в машинный код.

Конечно, к этой теме это никакого отношения не имеет, фронтенд в веб-разработке это дело совсем другое.
__________________
 Эль Презеденте

Изменено Oak (23.12 / 14:22) (всего 1 раз)
- 23.12.2015 / 14:51
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
Oak, в этой теме всё намешано, Ксакеп виноват.
__________________
 Чёрные усы кричает этот свисть
- 23.12.2015 / 14:51
REM!
  Модератор загрузок

REM! 
Сейчас: Offline
Oak, ты путаешь операторы сравнения. В JavaScript их два: первый (==) называется equality, а второй (===) — identity. Первый пытается привести типы к общему, второй — нет. Отсюда такие нелогичные результаты. Если интересно, можешь поискать таблицу для оператора равенства (нестрогого), там всё наглядно.

Отладим Всухую тобою написанное:
  1. console.log(1 == '1');

В данном случае строка приводится к числу (что равнозначно унарному плюсу), затем идет сравнение через ===. Имеем:
  1. console.log(1 === +'1'); // #=> true

Уже логичнее, не правда ли? Не будь так строг к JS ;)

Изменено REM! (23.12 / 14:57) (всего 4 раза)
- 23.12.2015 / 15:00
RblSb
  Пользователь

RblSb 
Сейчас: Offline
Ксакепу захотелось пересказать статью с хабра, поэтому он создал отдельную ненужную тему. Голосую за ее удаление.
- 23.12.2015 / 15:07
Oak
  Пользователь

Oak 
Сейчас: Offline
REM!, это мне напоминает аргументы программистов на Go, которые в ответ на жалобы об отсутствии дженериков говорят "А нам и без них хорошо".
__________________
 Эль Презеденте
- 23.12.2015 / 15:10
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
REM!, на твой пост (#441184) отвечу, что второй пост был взят из twitter-аккаунта @​cssunderhood. На данный момент его ведёт Андрей Ситник (автор PostCSS), так что выглядит как-то странно: они отказались, но и не отказались одновременно.
- 23.12.2015 / 15:13
Oak
  Пользователь

Oak 
Сейчас: Offline
Ксакеп, а где ссылка на сам твит?
__________________
 Эль Презеденте
- 23.12.2015 / 15:22
Dinisimys
  Пользователь

Dinisimys 
Сейчас: Offline
Oak, Плохой пример. Чего без этого? есть же == и ===
Все есть, что тебе еще надо.
- 23.12.2015 / 15:30
Oak
  Пользователь

Oak 
Сейчас: Offline
Dinisimys, ладно, да, согласен, хотя присутствие и ==, и === в языке одновременно очень смущает.
__________________
 Эль Презеденте
Наверх  Всего сообщений: 99
Фильтровать сообщения
Поиск по теме