大侠武功卓绝,视野开阔,会写18种语言的Hello World,最近在吭哧吭哧写前端,遇到了不少心灵的激荡:
1. 数组清空JS里的数组,在写强类型语言的程序员面前,根本不是数组,而是类似Java中List的一个存在。刚写数组时,想要清空数组里所有的元素,本能的想去找clear()方法。可是十分抱歉,JS中数组对象,根本没有那个方法。所以各位老铁们,你们是怎么清空一个数组的?我是里寻他得百度,最后,发现有人通过给数组length属性赋值为0的方式,清空一个数组,一脸懵逼。所以,我现在也是,给数组length属性赋值为0,来清空一个数组。
同上,在Java中,一个列表,添加另外一个列表中所有元素,简直是肌肉反应似地想起list的addAll()方法。可是在JS里,不好意思,木有这个方法,让你一脸懵逼。最终,发现老铁们用的最多的是使用扩展运算符,可是扩展运算符是ES6新增的,很难想象,在ES6之前,老铁们是怎么摆弄的。(注意哦,concat是返回的一个新的数组,我这里本意说的是不改变原来数组引用的情况下拼接两个数组哦。)
这个其实是我的锅,因为第一次使用扩展运算符时,场景是在一个数组中添加另外一个一个数组中所有元素,并且好长时间,只使用了这么一个功能,所以潜意识当中,认为扩展运算符的那三个点(真是不好意思,之前碰到扩展运算符时,都不知道它叫扩展运算符,所以百度的时候,真是搜索的“三个点”),做了类似于循环那样的操作,所以才把元素都添加到别的数组里。直到有一天,我看到了扩展运算符作用于对象上,简直是把我震惊了,所以赶紧又去瞅了下扩展运算符的用法。
话说老实巴交的大侠,写代码的风格就是一丝不苟。后台让我传个参数,是这样的{name:"zhangsan"},严谨大侠肯定这么写呀:
我天真的以为,世界就是这么,简单美好,原来JS里的对象,跟Java里的Map,一样嘛,key-value嘛哈哈。可是这么写代码的人,你出来给我解释解释,你为什么这么写一样能行,我保证不动手:
elment-ui这个UI框架,使用他的el-upload组件的时候,发现了这么一个奇怪现象。监听它的on-chage方法:on-change="onSelectChange":
发现了没,那个file应该是有name等属性的一个对象,可以你在arguments里,怎么长那个球样?正常的,不应该是这个样子的吗:
擦,这个参考我的另外一篇博客吧,本来就是一个在setUp方法中,得到dom ref引用的简单的事情,非要使用一种通过变量名建立联系的这种弱的不能弱的关系来搞。更要命的是,ref()函数的这个用法,官网一个字都没有提及。我觉得我心里的羊驼变得更多了。
7. NODE前端项目导入时,如果目录下是index.js,只写到目录名称即可这个都无力吐槽了,作为一个新手前端,按着import的路径去找代码,却发现里面只有个index.js,得愣了有三分钟才缓过神来。
8.解构解构本来挺抽象的了,然后Vue包装的方法,在入参时传入解构,
如:this.$store.dispatch('user/login', this.loginForm),这个方法,就是调用接口里的user/login方法呗,然后屁颠的去看那个js文件了,却发现login({ commit }, userInfo) {}这个方法入参竟然结构了一个commit属性,但是却根本不知道在解构谁(查看源码不方便),入参明明只有一个,你非要结构出来一个凭空出现的,顿时觉得心里的羊驼不够用了。琢磨了一下,也许是$store.dispatch这个方法包装的吧,它底层调用这个方法时,多入参了一个参数。
冗余参数对代码可读性的影响:next({ ...firstMenu, replace: true })这句代码中,入参肯定是个对象,但是你这么传,我确实猜不出来,firstMenu这个对象里,到底有啥有用的信息,我也不知道,next这个函数,到底需要啥字段。但是你要这么写呢:next({ path: firstMenu.path, replace: true })我一眼就能看出来,firstMenu里有个path属性啊,你这个next方法,入参里需要有path和replace两个参数,且只需要两个参数。为什么非用第一种方式写呢?代码可读性直线下降啊,这是要靠手撸达到加密混淆的效果啊,简直惨绝人寰。
10. global和window混用这个是最近才发现的,global和window傻傻分不清楚~~~~~~~~



