null == 0 // false
null > 0 // false
null >=0 // true
[] == 0 // true
-
==
操作符看 http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3-
null == 0
由于null
和0
类型不一样,ToPrimitive 时不一样,ToNumber 时相同,所以null == 0
返回false
-
[] == 0
先进行类型判断,[]
Object 类型,先 ToPrimitive 获取原始值,([]).toString() = '', 在进行类型转换 ToNumberNumber(([]).toString()) == 0 // true
-
-
>
从上面可得,其实null == 0
null > 0
null < 0
三者的结果相同,都是 false -
>=
比>
多了一步判断,上面例子如果null < 0
= false, undefined, 则>=
返回 true, 反正为 false
- JS 的世界一切皆对象
- 可以通过
mixin
,也可以通过原型链来对对象进行扩展
简单例子:
var a = {};
var b = {
say: function () {},
walk: function () {}
};
for (var k in b) {
a[k] = b[k];
}
function A() {}
function B() {}
A.prototype = B.prototype;
- global
- 内存,文件存储,数据库等。
- 数据库模块
- 数据操作方法集
- http, 加密、stream
- ...
- 关注 V8 动态,新的语法 ES5, ES6
exports 是对 module.exports {}
的引用,
当 require 是,返回的是 module.exports, 如果要对一个模块 export 的类型进行变东,
就要修改 module.exports,而不是 exports
# a.js
exports = module.exports = function () {}
# c.js
exports.a = require('./a')
# b.js
var a = require('./a')
a() //
var c = require('./c');
c.a()//
try {} catch(e) { /* save(e); */ }
请对下面的数据
[{name:’jch’, age:30, score:90, sex: 1},{ name:’oh’, age:31, score: 80, sex:1}, {name:’jia’, age:27, score: 70, sex:0} .....] 进行重组操作:
筛选年龄大于给定数据的用户,返回
以name为key,转化为对象。
以转化后的对象为目标,切换为以sex为key的分组数据(即sex为key,但value包含全部符合条件的对象)
使用 lodash 函式库
var newUsersByName = _.indexBy(_.filter(users, function (u) {return u.age > 20; }), 'name');
var newUsersBySex = _.indexBy(newUsersByName, function (u) { return u.sex; });
可以接触 async , bluebird, promis 工具进行处理,当然也可以使用 co 工具,再结合 stream 进行数据变换
伪代码
co(function *() {
var a = yield getPromise(1);
var b = yield getPromise(2);
var c = yield getPromise(3);
// 数据变换
var na = transform(a)
var nb = transform(b)
var nc = transform(c)
// ...
})();
异步,回调,io 无阻塞。 库多,浏览器端,后台更加友好。