小说网站快速做排名,有专门做市场分析的网站么,本地推广最好用的平台,网站滑动目录 delete__dirname和__filenameImport、Require、interopRequireDefaultrequireimportinteropRequireDefault引用出现的一些问题循环引用引用文件的变量作用域引入导致的路径错误问题 defer和async严格模式undefined和nullparseInt等转数子的方法#xff0c;如果参数是数字… 目录 delete__dirname和__filenameImport、Require、interopRequireDefaultrequireimportinteropRequireDefault引用出现的一些问题循环引用引用文件的变量作用域引入导致的路径错误问题 defer和async严格模式undefined和nullparseInt等转数子的方法如果参数是数字加字符会自动过滤字符原始字符串标签语句 delete
我在看nodejs的808协议解析的代码的时候看到了delete这个操作用来对超时做处理。 因为js自带垃圾回收机制所以delete不常用 但是比如前端通过接口向后端发一个对象比如这个对象是form表单里的数据如果不要把每个参数都传给后端可以用delete删除掉某几个字段
var obj {name: John, age: 25};
delete obj.age;
console.log(obj); // 输出: {name: John}__dirname和__filename
__dirname用来动态获取当前文件模块所属目录的绝对路径 __filename用来动态获取当前文件的绝对路径
Import、Require、interopRequireDefault
require
require是CommonJS的规范 require是一开始就执行读取模块 Nodejs使用的是require
静态编译 引用了之后会放入缓存所以可以使用require(‘…’).xxx直接使用里面的属性无需再次读取
import
import是ES6的规范 import是先不执行遇到使用到的时候再真正的读取模块
interopRequireDefault
interopRequireDefault的作用就是判断require的模块是否是已经被babel编译过的模块如果是则当前require的引用一定存在一个default属性否则为他加一个default属性这样便不会调用模块的default为undefined的情况了。
参考https://www.dvy.com.cn/2020/12/06/6976.html
引用出现的一些问题
循环引用
多个文件引用的时候一定要避免循环引用无论是几个文件循环都会导致报错在一开始写代码的时候就要注意将工具函数分出来
引用文件的变量作用域
举个例子如下
// utils.js
let a 1;
const fun () {a 2;
};
const getA () {console.log(a);
};
let obj {x: 0,
};
const changeObj () {obj.x 1;console.log(obj);
};
module.exports { a, fun, getA, obj, changeObj };// main.js
const utils require(./utils/utils);
utils.fun();
console.log(utils.a); // 1
utils.getA(); // 2
utils.a 3;
utils.getA(); // 2
// console.log(utils.obj); // { x: 0 }
utils.changeObj(); // { x: 1 }
console.log(utils.obj); // { x: 1 }
utils.obj.x 2;
console.log(utils.obj); // { x: 2 }可以看出以下两点 1.js的执行逻辑是一个文件一旦被加载就不会被销毁直到进程结束才会被销毁 2.引用可以当成浅拷贝被赋值的时候如果是对象之类的引用数据类型那么只会获得一个指针地址而不是整个数据。 引入导致的路径错误问题
// main.js
let readF require(./utils/readFile);
readF();
// readFile.js
const fs require(fs);
const readF () {let content fs.readFileSync(./file.txt);console.log(content);
};
module.exports readF;如上情况会报错Error: ENOENT: no such file or directory, open ./file.txt 因为引用这个模块的时候这个路径只是个字符串会直接引用到main.js中也就是在main.js中使用相对路径。所以需要用__dirname变成绝对路径。
// readFile.js
const fs require(fs);
const readF () {let content fs.readFileSync(__dirname/file.txt);console.log(content);
};
module.exports readF;defer和async
之前面试准备的时候知道这两个东西就是你用script标签的时候可以使用这两个不对html页面渲染阻塞 执行顺序 普通script遇到先网络加载再执行脚本再继续渲染 defer遇到并行下载等渲染完了再执行 async遇到并行下载下载完了直接执行 严格模式
“use strict” 防止不规范导致安全问题
undefined和null
!undefined和!null结果都是true
parseInt等转数子的方法如果参数是数字加字符会自动过滤字符
原始字符串
String.raw\u00A9 // 将版权符号变回字符串标签语句
之前好像见过但是没怎么在意看红宝书的时候刚好看到了记录一下这个在多层循环的时候可以任意跳出某个循环可以用continue和break加上label名称如下示例
let i,j,count 0;
label1: for (i 0; i 10; i) {label2: for (j 0; j 10; j) {if (i 5) {break label1;}if (j 5) {break label2;}count;}
}
console.log(i, j, count); // 6 0 36