Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
widget = require("widget")
do_render = () -> React.render(widget(state), domelement) if domelement?
render_process = () ->
try
do_render()
catch error
console.log error
setTimeout(render_process, 500)
if type_a == type_b
switch type_a
when "[object Undefined]" then a == b #можно сразу возвращать true
when "[object Boolean]" then a == b
when "[object Number]" then a == b # а вы точно хотите на +0 == -0 получать true? это не сарказм, это кривая система неточного равенства.
when "[object String]" then a == b
when "[object Function]" then a.toString() == b.toString() #не учитывается возможность существования функторов; не учитывается возможность оверлоада .toString, не учитываются нативные и binded-функции, которые возвращают function () { [native code] }
when "[object Null]" then a == b #можно сразу возвращать true
when "[object Array]" #не сравниваете свойства у массива. Да, в JS массив тоже объект и может иметь свойства.
len_a = a.length
len_b = b.length
if len_a == len_b
[0..len_a].every (n) -> equal(a[n], b[n])
else
false
when "[object Object]"
keys_a = Object.keys(a).sort() #не учитывается возможность существования defined Properties, сравнение прототипов
keys_b = Object.keys(b).sort()
if equal(keys_a, keys_b)
keys_a.every (k) -> equal(a[k], b[k])
else
false
function setField(value {
state.set(['path_to_field'], value)
}
export default {
setField
}
ff = x -> () -> x;
f1 = ff 1
f2 = ff 2
console.log f1.toString() == f2.toString() // true
Пишем на JS в функционально-декларативном стиле