从开始写Javascript到现在,已经有一个月了,这一个月学了不少新姿势,随便写写,简单整理一下。
1. Javascript
这个没什么好整理的…随便写几条。
1 | (function () { |
2. jQuery
2.1 选择器
1 | $("input[type=text]") // 选择属性 |
2.2 杂项
获取表单内容时,要用$("...").val()
而不是$("...").text()
.
3. Node.js
不知道写什么,随便写几个好玩的库:
cheerio
, 在服务器端解析html,跟jQuery用法差不多chalk
, 输出彩色文字gulp
, 流式自动化构建工具,后面细写
May.2 2017 更新
3.1 Node.js 文档阅读笔记
3.1.1 console.timer
计时工具。
1 | console.time('100-elements'); |
3.1.2 Buffer
Buffer 在处理文件或流时可能会用到,在处理文件时,跟 Python 的 bytes 有些相似。
创建 Buffer: Buffer.alloc(10)
或 Buffer.from([1, 2, 3])
;
长度: buf.length
;
切分: buf.slice([start, [end]])
;
字符串与 Buffer 转换:
1 | > b = Buffer.from("哦") |
3.1.3 child_process
生成子进程,执行文件:
1 | const spawn = require('child_process').spawn; |
如果进程可以立即结束(比如 ls),或者不需要实时查看 stdout 的输出,可以使用 child_process.exec
:
1 | const exec = require('child_process').exec; |
3.1.4 Path
用于处理文件路径,跟 os.path 类似。
1 | path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') |
4. React.js
4.1 JSX与Babel
JSX是一种语言,babel是一种预处理工具。
JSX可以在浏览器中转换为javascript并执行,有两个前提:
- 包含了
browser.js
- script标签的类型为
text/babel
看这里。
在很久以前,JSX代码转换库包含在React库里,名叫JSXTransformer.js
, 那时script标签的类型为text/jsx
, 但是后来JSX代码改用babel来转换了,所以script标签的类型也就变为了text/babel
, 代码转换库也不再由React提供。
吐槽:最初看tutorial的时候看的中文页面,这个页面很久很久没有更新过了,很多内容都过时了,在离线转换的时候需要安装包,npm报出一堆package deprecated
的信息,整个人一个大写的卧槽。后来看了上面的英文页面才知道JSXTransformer
已经不再使用了,现在大家都用Babel.
4.2 React
-
阮一峰大大写的React入门教程很不错,我基本上是看这个入门的。
-
写JSX时,要注意DOM节点的
class
和for
属性要写为className
和htmlFor
,因为class
和for
是javascript的关键字。 -
组件的生命周期:看官方文档,
render
函数中不要改变组件的state,若组件的props改变而需要相应更改state, 则要在componentWillReceiveProps
函数中完成state更改。函数执行完后,render函数会被执行,组件重新渲染。
5. gulp
5.1 简介
流式自动化构建工具,用于各类文件的转换(如jsx→js→min.js),监控文件变化,搭建静态文件服务器等,可以类比为makefile, 拥有种类繁多的插件。
5.2 操作
-
gulp.task(name[, deps], fn)
, 注册一个任务- name: 任务名称
- deps: 依赖的前置任务,string[]
- fn: 任务函数,在里面写该任务需要完成的具体事项
-
gulp.src(globs[, options])
, 输出一个满足匹配模式的stream, stream可以用pipe连接起来,类比shell的管道|
. -
gulp.dest(path[, options])
, 将stream写到某个path当中。 -
gulp.watch(glob [, opts], tasks)
或gulp.watch(glob [, opts, cb])
, 监控满足匹配模式的文件,若文件变化,则执行某些任务。
直接看一个例子:
1 | gulp.task('render', ['array', 'of', 'task', 'names'], function () { |
6. React工具集成: React+Babel+gulp
用gulp执行任务,用babel转换JSX.
6.1 gulp
所需插件:
- gulp
- gulp-babel
- gulp-uglify (压缩js文件用,可选)
gulpfile:
1 | var gulp = require('gulp'); |
6.2 Babel
所需插件:
- babel-preset-es2015
- babel-preset-react
.babelrc
文件:
1 | { |
若在全局安装了babel-cli
,则可以用babel命令转换文件:
- 若当前目录存在上述babelrc文件:
执行babel public\src --out-dir public\build
- 若当前目录不存在bebelrc文件:
执行babel --presets react public\src --out-dir public\build
7. Semantic UI
超级棒的一个前端组件库,去看文档吧。
8. 后记
终于写完了。
又一个月没有写东西了,代码写了不少,所学到的知识却没有及时整理下来。真是太懒,懒得整理知识。到现在还欠着一篇Django的生产环境配置的文章没写(其实就是一条命令+nginx配置而已),改天补上。
寒假算是荒废过去了,本来能够写更多东西的,却被一些事情打乱了计划。
以前觉得javascript是一门很糟糕的语言,代码写起来很乱,四五层回调看起来头都大了,但真正写了一个月以后感觉舒服了很多,很多代码写起来得心应手。JS的生态也让我很喜欢,各种工具组件层出不穷,使用起来也及其方便。
这一个月所写的js项目:
- carrez
前后端都有,后端Express, 解析html, 前端使用ajax和后端进行信息交互 - starwars
纯前端项目,使用React, 用了很久的browser.js
, 本地工具集成鼓捣了很久才鼓捣明白 - git_modifier
算是半个JS项目(Github告诉我我这是个JS项目,因为JS代码占比最大),后端Flask, 前端React, 说是Web App其实是个本地项目,用来读取及修改本地git repo的commit信息用的,奇怪的需求,写来自己用,方便伪造commit信息,帮某人作弊😂😂😂。
后面看看要不要写Mocha
吧。
最后,郑重感谢phoenixe同学给了我一个比较系统地学习和使用javascript的机会。谢谢你。
以上。