interview
javascript-frontend-basics
JavaScript 中 substring 和 substr 函数的区别是什么

前端 JavaScript 基础面试题, JavaScript 中 substring 和 substr 函数的区别是什么?

前端 JavaScript 基础面试题, JavaScript 中 substring 和 substr 函数的区别是什么?

QA

Step 1

Q:: 面试题

A:: JavaScript 中 substring 和 substr 函数的区别是什么?

Step 1

Q:: 答案

A:: substring() 和 substr() 都是用于字符串切割的 JavaScript 函数,但它们的参数和行为有所不同。substring(start, end) 接受两个参数,第一个参数是起始索引(包含),第二个参数是结束索引(不包含)。而 substr(start, length) 也接受两个参数,第一个参数是起始索引,第二个参数是返回的子字符串的长度。如果 start 是负数,substring 会将其视为 0,而 substr 会从字符串末尾开始计算位置。

Step 2

Q:: 面试题

A:: 在 JavaScript 中,如何判断一个变量是否是数组?

Step 2

Q:: 答案

A:: 判断一个变量是否是数组可以使用 Array.isArray() 方法。例如:Array.isArray(variable) 如果 variable 是数组,则返回 true,否则返回 false。

Step 3

Q:: 面试题

A:: JavaScript 中的闭包是什么?请举例说明。

Step 3

Q:: 答案

A:: 闭包是指在一个函数内部定义的函数可以访问其外部函数的变量。即使外部函数已经执行完毕,内部函数仍然可以访问这些变量。闭包常用于函数工厂和事件处理。举例:

 
function outerFunction() {
  let outerVariable = 'I am from outer';
  function innerFunction() {
    console.log(outerVariable);
  }
  return innerFunction;
}
const closure = outerFunction();
closure(); // 输出 'I am from outer'
 

用途

这些内容是前端开发中经常会用到的基础知识。substring 和 substr 的区别可以帮助开发者在处理字符串时选择合适的方法,提高代码的可读性和效率。判断变量是否是数组是数据处理和验证中的常见需求,而理解闭包则对于编写更复杂的逻辑和功能至关重要,尤其是在处理回调和异步操作时。\n

相关问题

🦆
面试题

如何在 JavaScript 中深拷贝一个对象?

🦆
答案

在 JavaScript 中深拷贝一个对象可以使用 JSON.parse 和 JSON.stringify 方法:

 
const original = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(original));
 

这种方法有局限性,比如无法拷贝函数和特殊对象(如 Date、RegExp)。另一种方法是使用递归算法或第三方库(如 Lodash 的 _.cloneDeep)。

🦆
面试题

解释 JavaScript 中的事件冒泡和事件捕获。

🦆
答案

事件冒泡和事件捕获是 JavaScript 事件处理模型的两个阶段。事件捕获阶段,事件从最外层的元素开始向目标元素传播;事件冒泡阶段,事件从目标元素向外层元素传播。通过使用 addEventListener 第三个参数,可以指定事件处理器在捕获阶段(true)还是冒泡阶段(false)触发。

🦆
面试题

什么是 JavaScript 的原型链?

🦆
答案

JavaScript 的原型链是对象继承机制的一部分。每个对象都有一个原型对象(prototype),对象可以从其原型对象继承属性和方法。当访问一个对象的属性时,如果对象本身没有这个属性,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或到达原型链的顶端(null)。

🦆
面试题

如何在 JavaScript 中实现继承?

🦆
答案

JavaScript 中实现继承的方法有多种。最常见的方法是使用 ES6 的 class 关键字:

 
class Parent {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log('Hello, ' + this.name);
  }
}
class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }
  greet() {
    console.log('Hello, ' + this.name + ', Age: ' + this.age);
  }
}
const child = new Child('John', 20);
child.greet(); // 输出 'Hello, John, Age: 20'
 

在 ES5 及更早的版本中,可以使用原型链和构造函数的组合来实现继承。