前端面试 75 道题,看完的人少之又少 (中)( 五 )


const employee = {firstName: "Marko",lastName: "Polo",position: "Software Developer",yearHired: 2017};从对象获取属性 , 早期方法是创建一个与对象属性同名的变量 。 这种方法很麻烦 , 因为我们要为每个属性创建一个新变量 。 假设我们有一个大对象 , 它有很多属性和方法 , 用这种方法提取属性会很麻烦 。
var firstName = employee.firstName;var lastName = employee.lastName;var position = employee.position;var yearHired = employee.yearHired;使用解构方式语法就变得简洁多了:
{ firstName, lastName, position, yearHired } = employee;我们还可以为属性取别名:
let { firstName: fName, lastName: lName, position, yearHired } = employee;当然如果属性值为 undefined 时 , 我们还可以指定默认值:
let { firstName = "Mark", lastName: lName, position, yearHired } = employee;47. 什么是 ES6 模块?模块使我们能够将代码基础分割成多个文件 , 以获得更高的可维护性 , 并且避免将所有代码放在一个大文件中 。 在 ES6 支持模块之前 , 有两个流行的模块 。

  • CommonJS-Node.js
  • AMD(异步模块定义)-浏览器
基本上 , 使用模块的方式很简单 , import用于从另一个文件中获取功能或几个功能或值 , 同时export用于从文件中公开功能或几个功能或值 。
导出
使用 ES5 (CommonJS)
// 使用 ES5 CommonJS - helpers.jsexports.isNull = function (val) {return val === null;}exports.isUndefined = function (val) {return val === undefined;}exports.isNullOrUndefined = function (val) {return exports.isNull(val) || exports.isUndefined(val);}使用 ES6 模块
// 使用 ES6 Modules - helpers.jsexport function isNull(val){return val === null;}export function isUndefined(val) {return val === undefined;}export function isNullOrUndefined(val) {return isNull(val) || isUndefined(val);}在另一个文件中导入函数
// 使用 ES5 (CommonJS) - index.jsconst helpers = require('./helpers.js'); // helpers is an objectconst isNull = helpers.isNull;const isUndefined = helpers.isUndefined;const isNullOrUndefined = helpers.isNullOrUndefined;// or if your environment supports Destructuringconst { isNull, isUndefined, isNullOrUndefined } = require('./helpers.js');-------------------------------------------------------// ES6 Modules - index.jsimport * as helpers from './helpers.js'; // helpers is an object// or import { isNull, isUndefined, isNullOrUndefined as isValid } from './helpers.js';// using "as" for renaming named exports在文件中导出单个功能或默认导出
使用 ES5 (CommonJS)
// 使用 ES5 (CommonJS) - index.jsclass Helpers {static isNull(val) {return val === null;}static isUndefined(val) {return val === undefined;}static isNullOrUndefined(val) {return this.isNull(val) || this.isUndefined(val);}}module.exports = Helpers;使用ES6 Modules
// 使用 ES6 Modules - helpers.jsclass Helpers {static isNull(val) {return val === null;}static isUndefined(val) {return val === undefined;}static isNullOrUndefined(val) {return this.isNull(val) || this.isUndefined(val);}}export default Helpers从另一个文件导入单个功能
使用ES5 (CommonJS)
// 使用 ES5 (CommonJS) - index.jsconst Helpers = require('./helpers.js'); console.log(Helpers.isNull(null));使用 ES6 Modules
import Helpers from '.helpers.js'console.log(Helpers.isNull(null));48. 什么是Set对象 , 它是如何工作的?Set 对象允许你存储任何类型的唯一值 , 无论是原始值或者是对象引用 。
我们可以使用Set构造函数创建Set实例 。
const set1 = new Set();const set2 = new Set(["a","b","c","d","d","e"]);我们可以使用add方法向Set实例中添加一个新值 , 因为add方法返回Set对象 , 所以我们可以以链式的方式再次使用add 。 如果一个值已经存在于Set对象中 , 那么它将不再被添加 。
set2.add("f");set2.add("g").add("h").add("i").add("j").add("k").add("k");// 后一个“k”不会被添加到set对象中 , 因为它已经存在了我们可以使用has方法检查Set实例中是否存在特定的值 。
set2.has("a") // trueset2.has("z") // true我们可以使用size属性获得Set实例的长度 。
set2.size // returns 10可以使用clear方法删除 Set 中的数据 。
set2.clear();我们可以使用Set对象来删除数组中重复的元素 。
const numbers = [1, 2, 3, 4, 5, 6, 6, 7, 8, 8, 5];const uniqueNums = [...new Set(numbers)]; // [1,2,3,4,5,6,7,8]49. 什么是回调函数?回调函数是一段可执行的代码段 , 它作为一个参数传递给其他的代码 , 其作用是在需要的时候方便调用这段(回调函数)代码 。