演示地址 https://neozhaoliang.github.io/wilson/index.html
代码在 https://github.com/neozhaoliang/pywonderland/tree/master/src/gifmaze/js
这个动画演示的是一个迷宫生成算法,它的特点是在所有迷宫(生成树)里面以相等的概率随机选一个。
我是上周二左右开始看 js 语法的,到了昨晚终于折腾出来了第一个正式的程序,以前有 C 和 Python 的基础,这个程序本身也用 python 实现过,所以对我来说不算很难。主要花的时间在理解 canvas 的 requestAnimationFrame 的调用机制上。
很多人说:一个合格程序员应该具有 xx 天内掌握一门新语言的能力。我感觉这话应该表述为 "应该具有 xx 天内掌握一门新语言的基础语法" 的能力。这个程序踩的坑有:
我 debug 的方法也很笨,就是写一个 html 调用这个 js 代码,在代码里面加上很多 console.log 语句,然后在 chrome 的控制台里面查看输出。
1
dingxi 2018-10-15 09:17:49 +08:00
很 nice 啊,学习下
|
2
98jiang 2018-10-15 10:01:47 +08:00
请问一下这个是自己想的吗? 或者说是在哪里看到的呢,也想学一下
|
3
Exia 2018-10-15 10:08:29 +08:00
赞,比较两个数组是否相同,假如都是一维数组,且都是数字,先将数组里面排序,然后都转字符串比较就好了,如果里面还有别的内容,如 object,多维数组就麻烦些。
|
4
mathzhaoliang OP |
5
darkkylin 2018-10-15 10:28:17 +08:00
第一个坑点不算是坑吧,两个数组,不能说因为数组内两个元素“相等”就判断它们是“相等数组”,其他语言不清楚,c 语言好像也是这样的结果。
第二个坑点初始化未赋值,则自动赋值为 undefined,javascript 存在双等号和三等号,而双等号比较的时候,如果等号两侧数据类型不同会进行隐式转换(造成宽松相等,比如 1 == true 结果为 true ),javascript 语法中,null == undefined 结果为 true,null === undefined 结果为 false。如果对 js 的隐式类型转换没信心的,比较的时候可以用 “===” 就能避免这个坑点了。 |
6
mathzhaoliang OP @darkkylin 在 python 里面因为 list 有 __eq__ 方法,所以 a = [0, 1] 和 b = [0, 1] 的话则 a == b 返回 true.
我刚切换到 js 的时候以为 js 也能这么写,结果 debug 的时候费了半天劲才发现 js 返回的是 false. 第二个坑我认为是 js 的设计缺陷。 |
7
hucheng91 2018-10-15 10:48:02 +08:00 via Android
第二个还真不是 bug,js 有套自己的隐式转换
|
8
mathzhaoliang OP @hucheng91 问题是这些隐式转换规则不好记忆,又不是语言所必须的。很多人津津乐道诸如 `++[[]][+[]]+[+[]]==10?` 之类的 fancy 的东西 ,将其作为 "掌握技巧“ 和 "成为老手" 的必要条件。可这跟写出良好的程序有帮助吗?
== 运算需要隐式转换一次,所以在用之前每个人都要记忆转换规则才行。这万一过几年语言标准变了呢?万一手残该用 === 的时候写成==了呢?这些麻烦本来都不是必要的啊? |
9
lrz0lrz 2018-10-15 11:51:35 +08:00
|