面试题
运算符优先级
() > + > ?:
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)
字符串:通过字面量 “” 或 ‘’ 创建或者构造函数创建,创建后无法改变
布尔类型:只有两个字面量true和false,其他数据类型可以通过转换成布尔类型,转换成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的指向一共有几种