平常写东西发现的知识,分享出来,持续更新
Node环境输出this
=》再浏览器和node环境this指向不同,一般浏览器this指向window,node环境指向global
cosole.log(this)
// 这是再vscode中生成个js文件输出,印象中this应该指向global,但输出 {}
// 而这个 {} 是module.exports 基于node机制,默认为空对象,再其他文件仅用require导入
- 导出来的是一个自定义模块,node模块中提供的一个外接口,为防止内部模块污染,默认为空对象
- module.exports 和global存储不同,这是俩块内存
- global指向的全局作用域,而此模块文件指向模块作用域, 如下:
// exportFile.js
var name = 'name';
this.name = 'moduleName';
global.name = 'gloablName';
module.export = {
name
}
// requireFile
var mFile = require('./exportFile.js');
console.log(global.name); // gloablName
console.log(mFile.name) // moduleName
console.log(this.name) // undefined
如下是global作用域名
function fun () {
console.log(this) // 当然这指向的是global
}
fun() // 因调用时指向的全局
数组降纬
方法有很多,这采用闭包+递归,实现类似flat的功能
let arrAy = [1, [4, 5, 6, [7, [9], 8]], 2, 3];
/**
*
* @param {*} array 数组,支持单纬和多纬,默认展开到一纬度
* @param {*} extend 指定展开纬度数量
*/
let func = (array, extend) => {
if (array.length < 0) return;
let count = 0;
return (funcc = (arr = array) => {
count++;
return arr.reduce((pre, cur) => {
if (extend && count === extend) return pre && pre.concat(cur);
return pre && pre.concat(Array.isArray(cur) ? funcc(cur) : cur);
}, [])
}
)()
}
// 通用多维展一纬度
let fun = (array) => array.reduce((pre, cur) => pre && pre.concat(Array.isArray(cur) ? fun(cur) : cur), []);
console.log(func(arrAy, 1)); // [ 1, 4, 5, 6, [ 7, [ 9 ], 8 ], 2, 3 ]
TS 类型 strictNullChecks
作用: 类型检测,非空类型
注*:在TS文档中建议开启
首先undefined和null 是所有类型的子集
let num:number = 0;
number = undefined;
number = null;
let str: string[] = ['0','1'];
str = undefined;
str = null;
// 以上这些都是成立的
再ts 2.0 版本中 增加的strictNullChecks这配置项设置为true, 以上便不成立
还有些函数返回值为void(无任何类型,可为undefined或null)
function fun (args? : void) {
if(args === null | undefined | void){
// 像这种非空参数,返回值可能是void ,但若不判断args,那么便受strictNullChecks限制,报类型 error
return 0;
}
}
function fun (callback?: ()=> void) {
if(callback){
callback() // 这种回调函数,也需要判断,否则受strictNullChecks检测报类型error
}
}
React 为什么渲染俩次?
官方给的答复:链接