- 函数的 arguments 属性是一个数组吗?如何遍历它?
arguments 是一个类数组对象,它的属性时从 0 开始依次递增的数字,还有 callee 和 length 等属性;但不存在常见的数组方法比如 forEach、map 等
如何遍历类数组
(1)call 和 apply 绑定
function foo() {
Array.prototype.forEach.call(arguments, (item, index. arr) => {console.log(item, index, arr)})
Array.prototype.forEach.apply(arguments, (item, index. arr) => {console.log(item, index, arr)})
}
(2)使用 Array.from 转换类数组到数组
function foo() {
const arr = Array.from(arguments)
arr.forEach((item, index. arr) => {console.log(item, index, arr)})
}
(3)使用展开运算符将类数组转化成数组
function foo() {
const arr = [...arguments]
arr.forEach((item, index. arr) => {console.log(item, index, arr)})
}
- 什么是 DOM?什么是 BOM
- DOM 是 document object model,文档对象模型,指的是把 HTML 文档当做一个对象,这个对象主要定义了处理网页内容的方法和接口
- BOM 是 browser object model,浏览器对象模型,指的是把浏览器当做一个对象,这个对象主要定义了与浏览器交互的方法 / 接口。
- DOM 的核心是 document 命名空间
- BOM 的核心是 window 命名空间,而 window 还是 Global 对象。所有定义的函数、var 变量都会作为全局对象的一个属性或是方法(这也会导致胡乱定义会使得浏览器爆栈),window 对象下又包含 location、navigator、screen 等命名空间,都是 BOM 的一部分
- 对类数组对象的理解,如何转化为数组?
- 一个拥有 length 和递增索引属性的对象,就可以被称为类数组对象。
- 类数组和数组的区别在于原型和数组的原生方法
- 举例如 arguements、NodeList 等等
- 函数参数也可以被看做类数组对象,因为其包含有 length 属性
转换成数组的方法
call 调用 slice 的方法
Array.prototype.slice.call(AryLike)
call 调用 splice 的方法
Array.prototype.splice.call(AryLike, 0)
apply 调用 concat 的方法
Array.prototype.concat.apply([], AryLike)
Array.from
Array.from(AryLike)
扩展运算符
[...AryLike]
- escap、encodeURI、encodeURIComponent 的区别
- encodeURI 是对争哥 URI 转义,将 URI 中的非法字符转为合法字符,一些对于 URI 中有特殊意义的字符不会转义
- enCodeURIComponent 是对 URI 的组成部分进行转义,所以一些特殊字符也会得到转义
- escape 和 encodeURI 的作用相同,不过它们对于 unicode 编码为 0xff 之外的字符处理时会有区别,escape 是直接在字符的 unicode 编码前加上 %u ,而 encodeURI 首先会将字符转换为 UTF-8 的格式,之后在每个字节前加上 %
- escape 的这种做法明显要用的多一些