1. 函数的 arguments 属性是一个数组吗?如何遍历它?

    arguments 是一个类数组对象,它的属性时从 0 开始依次递增的数字,还有 callee 和 length 等属性;但不存在常见的数组方法比如 forEach、map 等
    如何遍历类数组
    (1)call 和 apply 绑定

    1. function foo() {
    2. Array.prototype.forEach.call(arguments, (item, index. arr) => {console.log(item, index, arr)})
    3. Array.prototype.forEach.apply(arguments, (item, index. arr) => {console.log(item, index, arr)})
    4. }

    (2)使用 Array.from 转换类数组到数组

    1. function foo() {
    2. const arr = Array.from(arguments)
    3. arr.forEach((item, index. arr) => {console.log(item, index, arr)})
    4. }

    (3)使用展开运算符将类数组转化成数组

    1. function foo() {
    2. const arr = [...arguments]
    3. arr.forEach((item, index. arr) => {console.log(item, index, arr)})
    4. }
    1. 什么是 DOM?什么是 BOM
    • DOM 是 document object model,文档对象模型,指的是把 HTML 文档当做一个对象,这个对象主要定义了处理网页内容的方法和接口
    • BOM 是 browser object model,浏览器对象模型,指的是把浏览器当做一个对象,这个对象主要定义了与浏览器交互的方法 / 接口。
    • DOM 的核心是 document 命名空间
    • BOM 的核心是 window 命名空间,而 window 还是 Global 对象。所有定义的函数、var 变量都会作为全局对象的一个属性或是方法(这也会导致胡乱定义会使得浏览器爆栈),window 对象下又包含 location、navigator、screen 等命名空间,都是 BOM 的一部分
    1. 对类数组对象的理解,如何转化为数组?
    • 一个拥有 length 和递增索引属性的对象,就可以被称为类数组对象。
    • 类数组和数组的区别在于原型和数组的原生方法
    • 举例如 arguements、NodeList 等等
    • 函数参数也可以被看做类数组对象,因为其包含有 length 属性

    转换成数组的方法

    • call 调用 slice 的方法

      1. Array.prototype.slice.call(AryLike)
    • call 调用 splice 的方法

      1. Array.prototype.splice.call(AryLike, 0)
    • apply 调用 concat 的方法

      1. Array.prototype.concat.apply([], AryLike)
    • Array.from

      1. Array.from(AryLike)
    • 扩展运算符

      1. [...AryLike]
    1. escap、encodeURI、encodeURIComponent 的区别
    • encodeURI 是对争哥 URI 转义,将 URI 中的非法字符转为合法字符,一些对于 URI 中有特殊意义的字符不会转义
    • enCodeURIComponent 是对 URI 的组成部分进行转义,所以一些特殊字符也会得到转义
    • escape 和 encodeURI 的作用相同,不过它们对于 unicode 编码为 0xff 之外的字符处理时会有区别,escape 是直接在字符的 unicode 编码前加上 %u ,而 encodeURI 首先会将字符转换为 UTF-8 的格式,之后在每个字节前加上 %
    • escape 的这种做法明显要用的多一些