Skip to content

Javascript

JS相关知识。

一、js常见模块类型

  1. CommonJS
    • 主要用于服务器端(如Node.js)。
    • require加载模块,module.exportsexports导出。
    • 加载模块是同步的。
  2. AMD(Asynchronous Module Definition)
    • 用于浏览器端,解决异步加载。
    • 依赖前置,通过define函数定义模块,回调函数处理模块逻辑。
    • require.js库实现该规范,支持异步加载模块。
  3. UMD(Universal Module Definition)
    • 通用模块定义,兼容CommonJS和AMD。
    • 可在不同环境(浏览器、Node.js)使用。
    • 通过判断环境,采用不同方式加载和定义模块。
  4. 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