JS question

Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

JS question

Post by Sasha3091 »

Всем привет!

Кто нибудь может объяснить смысл этой функции на JS

Code: Select all


<!DOCTYPE html>
<html>
<body>

<p>Click the button to parse different strings.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
   
  var a=5;
  var b=1;
  var c="";
  
  if(!!"false"){
  a=a+5;
  b=3;
  c="a";
  
  };
  
  
  if(!!0){
  a=a+5;
  b=b+2;
  c="b";
  }
  
  
  alert(a+b+" "+c);
  
}
</script>

</body>
</html>


Что с чем тут сравнивается в if?

Thanks
User avatar
SUPER
Уже с Приветом
Posts: 604
Joined: 23 Jun 2016 19:49
Location: SFBA

Re: JS question

Post by SUPER »

Может вечер и я устал- я не понял почему ответ 13 а
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: JS question

Post by Sasha3091 »

SUPER wrote:Может вечер и я устал- я не понял почему ответ 13 а
Вот и я тоже, более того я не могу понять, что значит if(!!"false"), не говоря уже о том, что значит if(!!0)
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: JS question

Post by helg »

Внутри if стоит выражение, которое вычисляется как булевое. Небулево выражение приводится к булевому виду так:
Ненулевое число - истина, нуль - ложь. Поэтому 0 - это ложь, его отрицание: !0 - истина, а двойное отрицание: !!0 - ложь.
Непустая строка истина, пустая - ложь. Поэтому строка "false" - истина (да!), !"false" - ложь, !!"false" - истина.
Это совпадает с правилами С/C++.

Сложение двух чисел даёт их сумму. Сложение числа и строки в любом порядке даёт их конкатенацию. Вычасления в цепочке операций сложения производится слева направо.
Это совпадает с правилами Явы.

Вышесказанного должно быть достаточно для нахождения ответа в уме.
Last edited by helg on 17 Dec 2016 03:56, edited 1 time in total.
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: JS question

Post by Sasha3091 »

helg wrote:Внутри if стоит выражение, которое вычисляется как булевое. Небулево выражение приводится к булевому виду так:
Ненулевое число - истина, нуль - ложь. Поэтому 0 - это ложь, его отрицание: !0 - истина, а двойное отрицание: !!0 - ложь.
Непустая строка истина, пустая - ложь. Поэтому строка "false" - истина (да!), !"false" - ложь, !!"false" - истина.

Сложение двух чисел даёт их сумму. Сложение числа и строки в любом порядке даёт их конкатенацию. Вычасления в цепочке операций сложения производится слева направо.

Вышесказанного должно быть достаточно для нахождения ответа в уме.
Спасибо
User avatar
_Lenchik
Уже с Приветом
Posts: 1239
Joined: 10 Nov 2005 03:51

Re: JS question

Post by _Lenchik »

очень часто в тестах, присылаемых рекрутами - вопросы на интервью (30 вопросов за 10 мин) встречаются эти выражения

!!"false"
!"false"
!!0
!0

поэтому перд выполнением теста (30 вопросов за 10 мин) надо просто распечатать и повесить радом с компютором их значения. В спешке можно и ошибится.
Я знаю, как надо. Но сделаю, как хочу.
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: JS question

Post by Sasha3091 »

_Lenchik wrote:очень часто в тестах, присылаемых рекрутами - вопросы на интервью (30 вопросов за 10 мин) встречаются эти выражения

!!"false"
!"false"
!!0
!0

поэтому перд выполнением теста (30 вопросов за 10 мин) надо просто распечатать и повесить радом с компютором их значения. В спешке можно и ошибится.
Да зачем вам трудиться? Вот список ваших вопросов, вот список моих ответов, причем четыре варианта по времени года. :D
User avatar
_Lenchik
Уже с Приветом
Posts: 1239
Joined: 10 Nov 2005 03:51

Re: JS question

Post by _Lenchik »

20 sec на ответ - лучше все, что только можно написать заранее
Я знаю, как надо. Но сделаю, как хочу.
User avatar
stenking
Уже с Приветом
Posts: 14407
Joined: 26 May 2006 02:39

Re: JS question

Post by stenking »

Sasha3091 wrote:
SUPER wrote:Может вечер и я устал- я не понял почему ответ 13 а
Вот и я тоже, более того я не могу понять, что значит if(!!"false"), не говоря уже о том, что значит if(!!0)
первый оператор "!" переводит объект в булиан и загоняет его в отрицаловку а второй отказывается от первого ) На выходе, очищеный от примесей типа 0, null, undefined, булеан.
Last edited by stenking on 04 Jan 2017 03:38, edited 1 time in total.
Бога нет.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15477
Joined: 27 Sep 2007 22:53

Re: JS question

Post by Мальчик-Одуванчик »

А реально какой в этом практический смысл?
На мой взгляд - типичное мозгодрочерство и не более того.
В том же С такое в голову не придет писать, хотя язык подобные выкрутасы и позволяет.
User avatar
lxf
Уже с Приветом
Posts: 13593
Joined: 04 Jul 2001 09:01
Location: Boston, MA

Re: JS question

Post by lxf »

Мальчик-Одуванчик wrote: 03 Jan 2017 23:55 А реально какой в этом практический смысл?
Никакого. Более того, если кто начнёт писать код в таком стиле, то вряд ли проработает на одном месте долго. :-)
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: JS question

Post by Boriskin »

lxf wrote: 28 Mar 2017 01:37
Мальчик-Одуванчик wrote: 03 Jan 2017 23:55 А реально какой в этом практический смысл?
Никакого.
Какой то чмудак просто решил, что это неплохой тест на внимательность.
Тупизна как Энтропия. Неумолимо растет.

Return to “Вопросы и новости IT”