Nodejs笔记
js是传值的还是传引用的
总是传值,如果修改了传的对象的属性,则表现为传引用
function changeStuff(a, b, c)
{
a = a * 10;
b.item = "changed";
c = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
技巧
- 取时间戳
ms: Date.now()
s: Math.floor(Date.now() / 1000)
- 取当前时间
new Date()
- 根据timestamp取时间
new Date(timestamp)
- 截取小数点2点
parseFloat("123.456").toFixed(2);
Math.round(num * 100) / 100
- 字符串替换:
replace(src, dest)
- 计算一个由某个特殊字符分隔开的字符串里面分隔的内容的个数
str.split(‘|’).length
- 创建一个固定长度的数组,带有初始化值
var arr = Array.apply(null, Array(5)).map(function () { return 0; });
- 数组拷贝,跟python一样,slice,从头到尾
var arr2 = arr1.slice();
- char和ASCII码值之间转换
‘a’.charCodeAt(0) ==> 97
String.fromCharCode(97) ==> ‘a'
- 删掉json里面的一个属性
delete json.abc;
- 把一个object转成string
JSON.stringify(obj)
- 生成50个’a’的字符串:
Array(50).join(‘a’)
- 把一个字符串反转:
str.split('').reverse().join('');
- 打印代码执行时间
console.time('write 100 string')
console.timeEnd('write 100 string')
- 判断对象是否有某属性
if ('pro' in object)
注意点
- 对于数组,永远不要用这种写法: for (var i in arr)
- 查找子字符串是否在字符串中,如果需要正则表达式,用search,否则用indexOf会更快
- 高阶函数:把函数作为参数或返回值的函数
- 全局module安装在/usr/lib/node_modules
- 管理不同的node版本,使用nvm,或者n
apply, call和bind有什么区别?
三者都可以把一个函数应用到其他对象上,注意不是自身对象.apply,call是直接执行函数调用,bind是绑定,执行需要再次调用.apply和call的区别是apply接受数组作为参数,而call是接受逗号分隔的无限多个参数列表
怎样绑定node程序到80端口?
多种方式 1) sudo 2) apache/nginx代理 3) 用操作系统的firewall iptables进行端口重定向
exports与module.exports的区别:
module.exports 是一个Object,这个对象会被require取到, exports 是 module.exports 的一个引用,
版本
- 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
- 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
- latest:安装最新版本。
发一个http请求备忘
json的
var request = require('request');
var options = {
uri: '',
method: 'POST',
json: {
}
};
request(options, function (err, res, body) {
if (err) {
return console.log(err);
}
console.log(body);
});
application/x-www-form-urlencoded的:
var options = {
uri: '',
method: 'POST',
headers: {
'Content-Type' : 'application/x-www-form-urlencoded'
},
form: {
}
};
常见post数据格式:
application/x-www-form-urlencoded, multipart/form-data, application/json, text/xml
process
process对象是Node的一个全局对象,提供当前Node进程的信息。它可以在脚本的任意位置使用,不必通过require命令加载。
process.argv:返回当前进程的命令行参数数组。 process.env:返回一个对象,成员为当前Shell的环境变量 process.stderr 错误流 process.stdin 输入流 process.stdout 输出流
splice 移除元素:
> myArray = ['a', 'b', 'c', 'd']
["a", "b", "c", "d"]
> myArray.splice(0, 2) // 从0开始,去掉2个元素
["a", "b"]
> myArray
["c", "d"]
解决安装node后说没权限的问题
sudo chown -R `whoami` ~/.npm
sudo chown -R `whoami` /usr/local/lib/node_modules
生成随机字符串
Math.random().toString(36).substr(2);
npm
--save-dev
npm install babel-plugin-component -D
--save
npm i element-ui -S
备忘
function format(d) {
return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
}