Comments 46
меня порвало на лоскуты.
И чо?
Убило про
{} + {}
Мне понравилось!
Только надо было оформить по другому — сделать картинку кликабельной и нарисовать стрелку play на ней.
Только надо было оформить по другому — сделать картинку кликабельной и нарисовать стрелку play на ней.
Для тех, кто собрался минусовать пост — сначала пройдите по ссылке под картинкой.
Для тех у кого тормозит видео по линку — оно есть на трубе
youtu.be/tErVvempcCU
youtu.be/tErVvempcCU
Не ожидал, что всё так плохо…
Но проржался =)
Но проржался =)
Про приколы javascript можно посмотреть еще тут wtfjs.com/
Мой любимый:
Мой любимый:
Math.min() < Math.max();
// false
Считать это поведение WTF могут только люди, которые вообще не знают JS. Все поведение очень логичное, в т.ч. ваше любимое.
Про мое любимое объясните? Мне честно не понятна логика таких действий. Ссылка сойдет.
WTF это когда результат не совпадает с ожиданием, и естественно если ты знаешь почему происходит та или иная ситуация, считать это WFT не будешь.
WTF это когда результат не совпадает с ожиданием, и естественно если ты знаешь почему происходит та или иная ситуация, считать это WFT не будешь.
Определение функции. Функция Math.min возвращает минимальное из переданного. Если аргументы не переданы, то она возвращает максимально возможное число. Это поведение — логичное и последовательное. Просто нужно понимать, что Math.min не возвращает минимально возможное число, оно возвращает минимальное из переданных. Math.max — возвращает самое большее число из переданных или минимально-возможное.
Для того, чтобы окончательно понять, представьте, что в max дополнительным аргументом передаётся -Infinity, а в min — +Infinity.
Если вы считаете это поведение нелогичным, то скажите, как необходимо было поступить авторам этих функций? Я бы поступил точно так же.
А если необходимо самое больше и самое маленькое число, то можно использовать +Infinity и -Infinity.
wtfjs сделан для запугивания новичков и это сплошная демагогия о том, какой сложный язык, стараясь привязать к документированному поведению какие-то недокументированные возможности, которые вроде бы должны быть. Это всё-равно, что жаловатся, что JS поведёт себя не так же, как питон и не учтёт отступы:
Для того, чтобы окончательно понять, представьте, что в max дополнительным аргументом передаётся -Infinity, а в min — +Infinity.
Если вы считаете это поведение нелогичным, то скажите, как необходимо было поступить авторам этих функций? Я бы поступил точно так же.
А если необходимо самое больше и самое маленькое число, то можно использовать +Infinity и -Infinity.
wtfjs сделан для запугивания новичков и это сплошная демагогия о том, какой сложный язык, стараясь привязать к документированному поведению какие-то недокументированные возможности, которые вроде бы должны быть. Это всё-равно, что жаловатся, что JS поведёт себя не так же, как питон и не учтёт отступы:
if (cond)
code1();
code2();
for(var i=0;i<10;++i);
sum+=i;
for(var i=0;i<10;++i); // тут стоит точка с запятой - тело цикла нет
sum+=i; // будет ReferenceError или +10 если sum объявлен как число
var i=5;i=++i + ++i; // i?
Как сишник со стажем — скажу что it depends от компилятора
Скорее зависит от того, что принимает оператор +: уже преобразованные значения(будет 13) или ссылку объект, который он сам преобразует в значения(будет 14)
Вот этого достаточно :) gist.github.com/1123026
Вы могли не рассказывать так много. Все проясняет 1 фраза: «функция Math.min».
а я то дурак, думал что функции лучше со скобками в конце писать, оказывается надо просто заранее знать что имется в виде не константа -_-
а я то дурак, думал что функции лучше со скобками в конце писать, оказывается надо просто заранее знать что имется в виде не константа -_-
Если не возражаете, поспрашиваю еще. Почему:
function Dude(name){
this.name = name;
return [1, 2, 3];
}
new Dude('Bob');
// [1, 2, 3]
function Dude(name){
this.name = name;
return 3;
}
new Dude('Bob');
// { name: 'Bob' }
new:
Обратите внимание. Если конструктор вернул объект (именно объект, а не примитивное значение), то возвращается этот объект, иначе — возвращается значение this. К вашему примеру можно добавить такой:
The object returned by the constructor function becomes the result of the whole new expression. If the constructor function doesn't explicitly return an object, the object created in step 1 is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)
Обратите внимание. Если конструктор вернул объект (именно объект, а не примитивное значение), то возвращается этот объект, иначе — возвращается значение this. К вашему примеру можно добавить такой:
function Dude(name){
this.name = name;
return new Number(3);
}
new Dude('Bob'); // Number(3)
Я наверное какой то необычный программист, но я бы поднял исключение, если в функцию Max/Min не передано аргументов.
А зачем? Это исключительная ситуация, при которой лучше повалить всё приложение а не обработать найболее логичным образом?
var minNextValue = Math.max.apply( max, fetchValuesFromDb() );
Это исключительная ситуация, при которой лучше повалить всё приложение
как связано поднятие исключения и «повалить всё приложение»?
а не обработать найболее логичным образом?
поднять исключение и есть обработать наиболее логичным образом. Если нужно, что при отсутствии параметров функция вернула какое то дефолтовое значение — так никто не мешает написать какой нить minOrDefault
как связано поднятие исключения и «повалить всё приложение»?
а не обработать найболее логичным образом?
поднять исключение и есть обработать наиболее логичным образом. Если нужно, что при отсутствии параметров функция вернула какое то дефолтовое значение — так никто не мешает написать какой нить minOrDefault
Функция отрабатывает строго по стандарту и вполне логично. Так в чём проблема? В том, что есть люди, которые не читают доков, а стараются угадать поведение функции по стандарту? Угадайте поведение функции
Поведение min и max логичное, стандартизованное и, главное, документированное. Так что не так?
Math.random
она вернёт число от -Infinity до Infinity? От 0 до 1? В каждом языке — по разному.Поведение min и max логичное, стандартизованное и, главное, документированное. Так что не так?
вы наверное на php пишете?
Какое-то — это одна ситуация, логичное — совсем другая.
И в этом есть смысл. Например max:
var max = -Infinity,
values = [];
for (var i = values.length; i --> 0;) {
if (values[i] > max) {
max = values[i];
}
}
return max; // если values.length === 0 то вернется -Infinity
в нашем случае values=undefined
нет, в этом случае как раз values равно пустому объекту arguments. а может содержать значения.
Math.max( ) => values = []
Math.max(1 ) => values = [1]
Math.max(1,2) => values = [1,2]
Возможно, это даже лучше, чем «BSD is dying».
У меня видео категорически отказалось грузиться (возможно, из-за хабраэффекта?)
Вот оно же на YouTube: www.youtube.com/watch?v=9jD5rqukRmQ
Вот оно же на YouTube: www.youtube.com/watch?v=9jD5rqukRmQ
А мне показалось странным вот такое поведение:
выводится NaN, а не сообщение об ошибке или соответствующее из остальных чисел.
Такие же результаты если передавать любые «NaN»-ы. А если вместо NaN передать пустой массив, булевское значение или пустую строку то всё норм. Видимо всё кроется в авто-приведении одних типов переменных к другим и выходит, что [] == "" == false == 0.
Math.min(NaN,2,3);
// NaN
Math.max(NaN,2,3);
// NaN
выводится NaN, а не сообщение об ошибке или соответствующее из остальных чисел.
Такие же результаты если передавать любые «NaN»-ы. А если вместо NaN передать пустой массив, булевское значение или пустую строку то всё норм. Видимо всё кроется в авто-приведении одних типов переменных к другим и выходит, что [] == "" == false == 0.
www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf страница 163
min ( [ value1 [, value2 [, … ] ] ] )
Given zero or more arguments, calls ToNumber on each of the arguments and returns the smallest of the resulting values.
* If no arguments are given, the result is +Infinity.
* If any value is NaN, the result is NaN.
* The comparison of values to determine the smallest value is done as in 11.8.5 except that +0 is considered to be larger than -0.
The length property of the min method is 2.
Ситуация та же, что и с null в SQL
Sign up to leave a comment.
Wat