面试题

    运算符优先级

    () > + > ?:

    1、数组方法:会改变原数组的标红色不会改变原数组的标蓝色

    操作方法:

    增:用法:arr.method(),push()在原数组末尾添加一项方法括号内的参数,返回数组的新长度,unshift()在数组前面添加一项括号内的参数,返回数组的新长度,concat()创建一个一个副本,然后把参数添加到副本末尾,最后返回这个新数组

    删:pop()删除数组末尾的一项,返回数组被删除项,shift()删除开头的一项,返回数组被删除项slice(start, end)截取数组参数索引内的项,并返回这部分数组项组成的新数组,第一个参数不能为负,第二个参数为负表示从数组末尾开始找

    改:splice()

    查:indexOf()查找括号内参数在数组中的索引,未找到返回-1,includes()返回括号内参数在数组中是否存在,存在为true,否则为false,find()返回括号内参数匹配的第一个数组项,参数可以为一个函数,传递给函数的参数有数组项、索引、数组本身

    综合方法:splice(star, delete number, insert element)返回被删除数组项组成的数组,这个方法是数组最重要的方法之一

    排序方法:reverse()将数组元素反转并返回反转后的数组,sort()接收一个比较函数,对数组进行排序,不过这个方法排序只能针对数组项位数字才比较好用

    转换方法:join()接收一个参数,即字符串的分隔符,将数组项的每一项转换成字符串并用分隔符连起来,返回转换后的字符串,不改变原数组

    迭代方法:some()遍历数组将数组项传入到一个函数中,如果有一项能返回true,这个方法返回true,every()和some方法相同,不过要每一项都能返回true,这个方法才返回true,forEach()对每一项都运行传入函数,没有返回值,filter()对数组每一项运行传入函数,对函数返回true的项组成一个数组并返回,map()对数组每一项都运行传入函数,并将每次函数运行的结果组成一个数组后返回

    2、字符串方法

    操作方法:

    增:concat()将多个字符串拼接在一起,返回一个新字符串

    删:slice(start, end)截取两个参数索引之间的字符串,可以只写第一参数,负数表示从后往前计算,返回一个新字符串,

    substr(start, length)第二个参数为截取的长度,返回一个新字符串,

    substring(start, end)用法与slice相似,返回一个新字符串。

    改:trimLeft(),trimRight(),trim()删除字符串前、后或者前后的空格,返回一个新字符串

    repeat()复制字符串,括号内参数表示复制几次,返回一个新字符串

    padStart(length, 符号)、padEnd()在字符串前、后填充字符串,第一个参数表示字符串填充后长度,第二个参数表示填充的符号,返回一个新字符串

    toLowerCase()、toUpperCase()大小写转换,第一个小写,第二个大写

    查:chatAt(num)传给方法一个整数作为字符串索引去搜索该索引的字符并返回

    indexOf(字符,start)第一个参数为搜索的字符串,第二个参数为搜索的起始索引,在起始索引之后的字符串中搜索传入的字符串,并返回对应的索引,未找到返回-1

    lastIndexOf(字符)字符最后出现的位置

    startWith(字符串, start)第一个参数为要搜索的字符串,第二个参数是搜索的索引,如果在该位置找到该字符串返回true,如果没找到返回flase,如果第二个参数为零时可以省略,表示在开头找

    includes()在整个字符串或数组中搜索传入的字符串,如果存在就返回true,不存在返回false

    转换方法

    split()把字符串按照传入的符号拆分成数组中的每一项,返回新数组

    模板匹配方法

    match()传入一个字符串或一个正则,如果正则为全局,则在整个字符串中返回所有匹配的选项并返回一个数组,如果非全局,那么只返回第一个匹配的选项,不存在返回null

    search()接收一个参数,可以是正则表达式或一个字符串,如果字符串中有匹配项则返回匹配的索引,不存在则返回-1

    replace()两个参数,第一个参数为搜索内容,可以为正则表达式,第二个为替换元素,会把整个字符串中匹配项都替换

    3、数据类型

    基本数据类型:

    数字:0b(二进制)、0o(八进制)、0x(十六进制)、特殊数值NaN(表示为不是一个数字,不与自己相等,常在计算失败后抛出,检测方法isNaN)、特殊数值infinity(表示无穷大,不与自己相等,常在数值大于可表示范围后抛出,检测方法isFinity)

    字符串:通过字面量 “” 或 ‘’ 创建或者构造函数创建,创建后无法改变

    布尔类型:只有两个字面量truefalse,其他数据类型可以通过转换成布尔类型,转换成false的值(空字符串””、数字0和NaN、null、undefined),转换成true的值(非空字符串、非零数值、任意对象、N/A(不存在))

    Null:只有一个值null,null表示一个空对象指针,所以typeof null时会返回一个Object的原因,undefined也是由null派生出来的,所以null == undefined //true

    undefined:只有一个值undefined,只有在变量声明了还未初始化前被赋值为undefined

    symbol:symbol()标识符括号内的字符只是一个标签,可以和别的symbol标识符相同,但是每个symbol标识符都是不相等的

    引用数据类型:Object:

    基本对象

    数组

    函数

    两者之间的存储区别:引用数据类型存放在堆中,基本数据类型存放于栈中

    4、相等’==’和严格相等’===’的区别

    相等’==’:存在隐式转换

    严格相等’===’:只比较两个数据是否相同,不对他们的数据类型做任何转换

    1、0 、“ ”、 [ ]、 false两两之间是相等的关系
    2、null 和 0 、“ ”、 []、 false之间并不相等
    3、undefined 和 0 、“ ”、 [ ]、 false之间并不相等
    4、null 和 undefined 是相等的

    5、深拷贝和浅拷贝的区别

    浅拷贝:Object.assign()

    深拷贝

    重要方法:JSON.parse()和JSON.stringify()这种方法会忽略undefined、symbol、和函数

    jQuery.extend()

    lodash.cloneDeep()

    6、数据转换

    显示转换:通Number()比较严格,当转换的数据类型中有非数字字符时,就会抛出NaN、String()、Boolean()、parseInt()、parseFloat()等方法,对数据做显示转换

    隐式转换:通过运算符”+”、”-“、”*”、”/“、”%”、”=”等符号对数据进行隐式转换

    7、闭包的概念

    外层函数调用后,外层函数的函数作用域对象,被内层函数引用的而无法释放,就是闭包的本质。

    优点:变量私有化

    缺点:如果使用不当,会造成内存泄露

    用途:防抖和节流,函数柯里化

    8、作用域链

    9、原型链

    10、如何改变this

    箭头函数

    call()

    apply()

    11、this的指向一共有几种