-
原始值和引用值类型及区别
原始值: 存储在栈中的简单数据段,即他们的值直接存储在变量访问的位置。
包括五种原始类型:undefined、null、boolean、number、string。
引用值:存储在堆中的对象,即存储在变量处的值是一个指针,只想存储对象的内存处。
包括:object、array、function等 -
判断数据类型typeof、instanceof、Object.prototype.toString.call()、constructor
单目运算符typeof()返回值为一个string类型
双目运算符instanceof()在框架间传递变量时,无法使用instanceOf检测类型 可以检测某对象是否是一个自定义对象的实例
object.prototype.toString.call(obj)方法会将自定义的对象识别为object -
类数组与数组的区别与转换
类数组对象:arguments (包含传入函数中的所有实参集合,有个callee属性,指向拥有这个arguments对象的函数)
DOM对象列表
区别:
相同点:都可用下标访问每个元素,都有length属性。
不同点:数组对象的类型是Array,类数组对象的类型是object,也就是说类数组原型是Object;类数组不具有数组所具有的方法,数组遍历可以用 for in和for循环,类数组只能用for循环遍历。 -
数组的常见API
(1)不改变原数组
1)String(arr):将数组转化为字符串
2)join():把数组中的所有元素放入一个字符串,默认为’,’,也可以自定义分隔符
3)concat():数组拼接
4)slice():切割 含头不含尾
5)indexOf:返回指定字符串值在字符串中首次出现的位置
(2)改变原数组
1)splice:从数组中添加/删除项目,然后返回被删除的项目(splice(i,n)从开始n个元素)
2)reverse:反转原数组
3)sort:排序
4)push:末尾添加新元素
5)pop:删除返回数组的最后一个元素
6)shift:删除第一个元素并返回
7)unshift:
迭代方法(以下方法都不会修改数组中包含的值):
every():对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true。
filter():对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组。
forEach():对数组中的每一项运行给定的函数。这个方法没有返回值。
map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。
some():对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true。 -
bind、call、apply的区别
apply的实现和call很类似,但是需要注意他们的参数是不一样的,apply的第二个参数是数组或类数组.
bind 和call/apply 有一个很重要的区别,一个函数被 call/apply 的时候,会直接调用,但是bind 会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。 -
new的原理
在调用new的过程中:
1)新生成对象
2)链接到原型
3)绑定this
4)返回新对象
//定义create方法,实现类似new的方法
function create(){
//定义空对象
let obj = {};
//取出参数列表的第一个参数(构造函数)
let Con = [].shift.call(arguments);
//手动指正obj的构造函数为Con(链接原型)
obj.proto = Con.prototype;
//调用Con,改变this为obj,传入剩余参数arguments
let result = Con.apply(obj,arguments);
//考虑到Con函数中有return的原因,需要对result进行判断
return result instanceof Object ? result : obj
} -
如何正确判断this?
谁调用它,this 就指向谁 -
闭包及其作用
闭包就是能够读取其他函数内部变量的函数
由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。(正常机制中,在函数被调用结束之后,类似于垃圾回收制回收)。
缺点:1)浪费内存2)可以改变父级元素中的变量值
js常见面试题(一)
最新推荐文章于 2021-08-28 22:59:08 发布