Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
["1", "2", "3"].map(parseInt)
? Если бы он внимательно прочитал описание обеих функций (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map и developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) вопросов бы не возникало.parseInt("1", 0, ["1", "2", "3"])
parseInt("2", 1, ["1", "2", "3"])
parseInt("3", 2, ["1", "2", "3"])
["1", "2", "3"].map(function(item, index, array){ return parseInt(item, 10); })
["1", "2", "3"].map(function(item){ return parseInt(item); })
["1", "2", "3"].map(parseInt)
js > Number
[Function: Number]
js > ['1', '2', '3'].map(Number);
[ 1, 2, 3 ]
js > x = _
[ 1, 2, 3 ]
js > x[0]
1
js > typeof x[0]
'number'
Number('123_')
NaN
parseInt('123_')
123
["1", "2", "3"]
— да, а для ["07", "08", "09"]
?> ["07", "08", "09"].map(function(item){ return parseInt(item); })
[ 7, 8, 9 ]
parseInt("09")
возвращает 0.js> ["07", "08", "09"].map(function(item){ return parseInt(item); })
[7, 0, 0]
по стандарту parseInt, при отсутствии явно заданной системы счисления, строки начинающиеся с 0 интерпретирует как восьмеричные.
15.1.2.2 parseInt (string, radix)
The parseInt function produces an integer value dictated by interpretation of the contents of the string argument according to the specified radix. Leading white space in string is ignored. If radix is undefined or 0, it is assumed to be 10 except when the number begins with the character pairs 0x or 0X, in which case a radix of 16 is assumed. If radix is 16, the number may also optionally begin with the character pairs 0x or 0X.
["1", "2", "3"].map(parseInt)
в коде, не понятно, то ли автор не прочитал (или прочитал, но забыл) соответствующие доки, то ли сознательно использовал фичи языка для достижения того результата, который получился. Слишком много в JS неявностей и умолчальностей.Слишком много в JS неявностей
$a = "2d9"; $a++; $a++; echo $a;
"2d9" -> "2e0" -> 2 -> 3
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
…
Tip
Passing in the value -1 will show every possible error, even when new levels and constants are added in future PHP versions. The E_ALL constant also behaves this way as of PHP 5.4.
for (i in [1, 2, 3]) console.log(i + 1);
!~utils.indexOf()
!~[1,2,3,4].indexOf(getInt())
короче и интуитивнее в написании, чем [1,2,3,4].indexOf(getInt()) == -1
. При чтении, конечно, сложности, у неподготовленного человека.var data = c && c.data || defaultData
тоже ребус, но это не значит, что они плохие.var data = (c && c.data) ? c.data : defaultData;
var data;
if (c && c.data) {
data = c.data;
} else {
data = defaultData;
}
писать
var data = (c && c.data) ? c.data : defaultData;
— для кого-то это также покажется ребусом, встречал как минимум двух человек с таким отзывом об этой конструкции.proxy.guid = fn.guid = fn.guid || jQuery.guid++;
(для ситуации, когда c.data определён, скорость вашего решения уступает на 35%)
proxy.guid = fn.guid = fn.guid || jQuery.guid++;
Array[[prototype]]
ф-ями forEach, map, reduce
etc. и простым лупом. И что теперь, не использовать их?2. Понятен абсолютному большинству программистов большинства популярных языков;Может тогда питонистам отказаться от лямбд? А что делать тем, кто пишет на Clojure? :)
Лично я не вижу ничего смешного
Ваши тесты — это сродне убрать соломинку из стога сена (в ущерб лаконичности) на фоне разницы минимум на порядок между ES5 Array[[prototype]] ф-ями forEach, map, reduce etc. и простым лупом. И что теперь, не использовать их?
Может тогда питонистам отказаться от лямбд?
Посмотрите на гитхабе код хотя бы топ-50 проектов на JS
!~x
это x != -1
и убедиться, что это всегда так, без исключений когда x например undefined или null. А чтобы было совсем уж нескучно, библиотеки JS битком набиты коллбэчной лапшой
На деле же найти литературу, где внятно описывается, как создавать эти самые тесты, очень сложно.
Типичный набор тестов, написанный простым смертным (а не гуру тестирования) помогает всего лишь выявить ошибку, но совершенно не помогает определить точку её возникновения.
a fast and fully-featured autocomplete library
return list.filter(function (item) { return item.indexOf(query) != -1; });
Хватит быть милым и умным