foxlele2014 / boring

boring
0 stars 0 forks source link

其他js知识 #9

Open foxlele2014 opened 7 years ago

foxlele2014 commented 7 years ago

$(function() {

}).ready(function() { $('#leakBlackList').next().append('');

});

function readAsText() { console.log('a') var file = document.getElementById('uploadfile').files[0]; var reader = new FileReader();

reader.readAsText(file,"gb2312");
reader.onload = function() {
    var msg = this.result;
    console.log(msg.split('\n')[0].split(',')[0]);
}

}

html5 API http://html5index.org/

http://www.cnblogs.com/xiaoheimao2008/archive/2012/09/14/2684400.html

http://blog.csdn.net/shanfaxiang/article/details/46340469

读取csv文件, 一行里的每列是按照,(逗号)分割, 每行都是对应csv里的每行(可以用\n分割),

foxlele2014 commented 7 years ago

模块化规范:commonjs、AMD、

同步加载、异步加载

都是用require,

用法不一样

如node是用commonjs var math = require('math');

定义模块,直接是module.exports = function aaa() {};

AMD: require([module],callback);

module需要用define来定义 define(id,depend,factory);

目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js

foxlele2014 commented 7 years ago

CMD 、AMD

依赖就近,延迟执行(seaJs) define(require,exports,module){ var a = require('../a'); }

AMD:

require(['a'],function(){})

foxlele2014 commented 7 years ago

ES6 用import导入,export导出(对外接口)

变量、函数都可以export。

如果想在一个模块中先输入后输出一个模块,import语句可以和export语句写在一起。 import {a, b, c} form './abc'; export {a, b, c} //使用连写, 可读性不好,不建议 export {a, b, c} from './abc';

foxlele2014 commented 7 years ago

一篇挺好的介绍:

http://www.cnblogs.com/chenguangliang/p/5856701.html

foxlele2014 commented 6 years ago

观察者模式 观察者模式2

foxlele2014 commented 6 years ago

别人的封装

dva

foxlele2014 commented 6 years ago

使用file api来检查文件的二进制文件。

背景:用普通的封装好的上传工具,没有提供读取文件二进制信息。现在为了防止用户修改文件后缀名达到绕过前端验证文件格式,现在读取文件的二进制的前几个字节,若符合对应的文件格式则允许,不然就提示文件格式不正确。 以及需要提示当前浏览器是否支持。

目的:检查文件的mimetype,以及文件大小。 验证: 使用input的type文件类型,上传文件, 能获取到name,size,lastModifiedDate,type等。 不过type这点不准确(可能是通过截取文件的后缀来匹配的,通过修改文件的后缀,会修改这个type值。

通过input type=file 读取到的file都是filereader reference,所以应该都可以使用这个的api

apk文件就是zip文件,然后标志是否是apk文件是有固定的标记的。 所以判断的时候就要先找到这个标记。(这个标记哪里来呢??就可以用:工具010editer,有zip文件格式模板,他的脚本就是直接判断标记,解析zip结构。)

标记基本都是在包的后1/3,所以可以从后边开始读起,每次只读200字节。 然后将200个字节转换成intarray,例如[80,xx,xx,xx],这个是标记的十进制数字,,就先在这个长度200的数组里边找到80的所以位置,组成一个新数组,然后循环新数组,每次读取4个字节和标记数组比对。符合的话,就记录位置。。

然后加上之前传来的位置进行计算。

这个时候得到了一个位置。

1、从文件末尾处读取第三个~第六个字节
2、从文件偏移0x0041EC92读到文件末尾区域,匹配以下字符串 AndroidManifest.xml classes.dex META-INF/MANIFEST.MF resources.arsc 同时含有,则是APK

1、查找标志 0x504B0506 的位置 => offset 2、读取块大小:offset - 0xC = 块大小 3、读取块开始位置:offset + 0x10 = 块偏移 4、从块偏移取始读取,长度为块大小的区域,匹配以下字符串 AndroidManifest.xml classes.dex META-INF/MANIFEST.MF resources.arsc 同时含有,则是APK => 0x0041EC92

fileReader reference Reading files in JavaScript using the File APIs

foxlele2014 commented 6 years ago

关于引用传递和值传递的。

有点神奇。

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);

引用传递值传递