Appearance
Javascript
JS相关知识。
一、js常见模块类型
- CommonJS
- 主要用于服务器端(如Node.js)。
- 用
require
加载模块,module.exports
或exports
导出。 - 加载模块是同步的。
- AMD(Asynchronous Module Definition)
- 用于浏览器端,解决异步加载。
- 依赖前置,通过
define
函数定义模块,回调函数处理模块逻辑。 - 有
require.js
库实现该规范,支持异步加载模块。
- UMD(Universal Module Definition)
- 通用模块定义,兼容CommonJS和AMD。
- 可在不同环境(浏览器、Node.js)使用。
- 通过判断环境,采用不同方式加载和定义模块。
- ES6模块
- 语言层面的模块系统。
- 用
import
导入,export
导出。 - 静态分析导入导出关系,支持模块的循环引用。
二、slice和substring和substr的区别
substring
在 JavaScript 中,substring()方法用于提取字符串的一部分。它接受两个参数,start和end。start是必需的,表示提取的起始位置(索引从 0 开始),end是可选的,表示提取的结束位置(不包括该位置的字符)。例如:
如果start > end,会自动交换这两个参数的位置;如果其中一个小于0,则替换成0。
js
let str = "Hello, World!";
let result = str.substring(7, 12);
// result的值为"World",提取从索引7(包含)到索引12(不包含)的字符
slice
slice()方法同样用于提取字符串的一部分,它也接受两个参数,start和end,含义和substring类似,不过slice()方法在处理 负数
索引时有所不同。负数索引表示从字符串末尾开始计数,例如-1表示最后一个字符。
js
let str = "Hello, World!";
let result = str.slice(7, -1);
// result的值为"World",提取从索引7(包含)到倒数第一个字符(不包含)的字符
includes和indexOf
indexOf 和 includes 都可以接受第二个可选参数,用于指定开始查找的索引位置。
效率
对于简单数据类型(如数字、字符串等),在大多数现代浏览器中,includes方法和indexOf方法的性能差异不大
。它们在底层实现上都需要遍历数组元素来进行查找。不过,includes方法在语义上更简洁,当只需要判断元素是否存在时,使用includes可能更易读。
复杂数据类型查找
当数组元素是复杂数据类型(如对象)时,indexOf方法使用严格相等(===)来比较元素。这意味着它会比较对象的引用,而不是对象的内容。
js
let obj1 = {name: 'John'};
let arr = [obj1];
console.log(arr.indexOf(obj1)); // 0
console.log(arr.includes(obj1)); // true