Page 115 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 115

О
       выполняться бесконечно. Это связано с тем, что  .   1 - это число,  которое не может
       быть  точно представлено в виде значения двойной точности, поскольку оно нахо­
       дится между двумя представлениями двоичной дроби. Поэтому на третьей итера­
       ции этого цикла n будет иметь значение  .   3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ,   проверка даст fal e
                                            О
                                                                                 s
       и единственный шанс прервать цикл будет упущен.
          Этот  цикл  можно переписать так,  чтобы  использовать  число Number .   E P S I LON
       и оператор сравнения, чтобы осуществить "более мягкое" сравнение и успешно оста­
       новить цикл.
       let  n  =  О ;
       while ( t rue )
           n  +=  0 . 1 ;
           i f (Math . a bs ( n   - 0 . 3 )   <  NumЬer . EPSILON )  break;

                 g
       console . l o ( ' Stopped  at  $ { n )  ' ) ;
          Обратите внимание, что мы вычитаем целевое число (О . 3) из проверяемого чис­
       ла (n) и получаем его абсолютное значение (используя функцию Math . a bs, рассмо­
       тренную в главе  6 ), которое затем и сравниваем с пороговым значением. В данном
                       1
       случае мы могли бы просто проверить, не больше ли n значения О .   3. Однако мы
       выполнили несложные вычисления, чтобы продемонстрировать вам способ опреде­
       ления, достаточно ли два числа двойной точности близки, чтобы их можно считать
       равными.


       Конкатенация строк
          В JavaScript оператор + используется и для сложения чисел, и для конкатенации
       строк (что весьма распространено; наиболее известными примерами языков, не ис­
       пользующих оператор + для конкатенации строк, являются Perl и РНР).
          Что именно имеется в виду, сложение чисел или конкатенации строк, JavaScript
       определяет по типами операндов. И сложение, и конкатенация обрабатываются слева
       направо. JavaScript исследует каждую пару операндов слева направо, и если любой
       из операндов является строкой, то осуществляется конкатенация строк. Если оба
       значения являются числовыми, то происходит сложение. Рассмотрим следующие две
       строки кода.
       3  +  5  +
                      / /  результат  - строка  "8811
               11 8 11
       "З"  +  5  +  8   11  результат  - строка  "358 "
          В первом случае JavaScript сначала вычисляет сумму  ( 3    +  5 ) , а затем осущест­
                                                           "
       вляет конкатенацию строк  ( 8  +  " 8 "   ) . Во втором случае  (  3 "   +  5 )   вычисляется как
       конкатенация, затем  ( " 3  5 "   +  8 )   - тоже как конкатенация.





       1 1 4    Глава 5. Выражения и операторы
   110   111   112   113   114   115   116   117   118   119   120