js面试笔记
js面试笔记
1、数据类型
5种基本数据类型:Undefined, Null, Boolean, Number, String
1种复杂数据类型:Object
检验方法
typeof
可以成功的检验出除开null之外的五种类型,但 typeof null = object
instanceof
可以检验是哪种类型的对象,如函数 数组等。如:
function f () {
console.log('a')
}
console.log(f instanceof Function) // true
数组
基本方法:
- push、pop模拟栈,shift,unshift模拟队列,都是在原数组上改动,pop和shift返回的是删除元素的内容,push和unshift返回的是加入元素后的数组长度:
const a = [1, 2, 3, 4]
const pop = a.pop()
console.log(pop) // 4 返回的是弹出的元素
consol.log(a) // [1, 2, 3]
const push = a.push('push')
console.log(push) // 5 返回的是操作后的数组元素个数
console.log(a) // [1, 2, 3, 'push']
const shift = a.shift()
console.log(shift) // 1 返回的是第一个元素
console.log(a) // [2, 3, 'push'] 返回的是删除第一个元素后的数组
const unshift = a.unshift('unshift')
console.log(unshift) // 4 返回的是操作后的数组元素个数
console.log(a) // ["unshift", 4, 5, "push"] 返回加入元素后的数组
- reverse和sort分别是逆转和排序,都是对原数组进行操作
- concat,传入的是元素就直接将其放到数组末尾,是数组就将其每个元素放到数组末尾,返回值是创建的一个新的数组,原数组不改变
- slice,切片,传入两个参数,分别是start和end,返回一个在[start, end)之间的新的数组,原数组不改变
- splice,可传入三个及以上参数,第一个为起始操作点,第二个为要删除的元素个数(若是只添加就传0),第三个及之后是要添加的元素,返回删除的元素,对原数组进行操作,原数组改变
![img](file:///C:\Users\ARASHI\Documents\Tencent Files\1799662875\Image\C2C\D98EDBD6F376F36BE44C3FD002709A09.png)
函数
-
函数内有两个特殊的对象,arguments和this,其中arguments还有个callee属性可以获取到值拥有中国arguments对象的函数,其实和写函数名一样,但是可以把函数名和函数解耦;
-
函数有两个属性,length和prototype,length的定义的函数的个数,prototype是保存所有实例方法的所在(不可枚举,所以用for-in无法发现);
-
函数有三个基本的方法,apply、call、bind:
- 三个函数都可以扩充函数赖以运行的作用域,即可以不是当前的this;
- apply接受两个参数,第一个是指定的新的作用域(对象),第二个是参数集合(可为数组或对象);
- call接受至少一个参数,第一个是指定的新的作用域(对象),第二个及之后都是参数;
- bind返回一个函数的实例,接受一个参数 指定的新的作用域(对象)。
-
基本包装类型与引用类型,引用类型如
var a = new Number(123)
,得到的a是一个Number的实例,但若是var a = 123
,a就只是一个基本包装类型的值。其最大的区别在于 对象的生存期: -
自动创建的基本包装类型的对象只存在于一行代码执行的一瞬间,然后立即被销毁;啥意思呢,后台自动调用了一次创建实例的构造函数得到一个对象,将值赋给变量后对象立即被销毁;
- 使用new操作符创建的引用类型的实例在执行流离开当前作用域之前一直保存在内存中;
-
区别的意义在于,不能在运行时为基本类型值添加属性的方法,因为每次都创建一个对象然后立即被销毁了,每次都是新的对象。
var n = 3
n.length = 4
console.log(n.length) // undefined
var nn = new Number(3)
nn.length = 4
console.log(nn.length) // 4
Number和Boolean
不管是引用类型还是基本类型,都可以得到这两个对象的值,但在使用 typeof 和 instanceof 这两个操作符的时候却会得到完全不一样的结果:
- 使用typeof的时候,会直接看当前是基本类型还是由构造函数创造的对象实例;
- 而使用instanceof的时候,会看当前是否是由某个基本类型创建出来的实例;
- Number和Boolean基本不用new来创建比较好。
var n = 3
console.log(typeof n) // number
console.log(n instanceof Number) // false
var nn = new Number(3)
console.log(typeof nn) // object
console.log(nn instanceof Number) // true
Number的三个常用方法
- toFixed(num),得到小数位为num数值的字符串表示;
- toExponent(num),返回指数表示法(e表示法)的字符串表示;
- toPrecision(num),返回精度为num数字的字符串表示。
String
String就说一下常用的一些方法:
访问特定字符的方法:
- charAt(2),返回位置2的字符;
- charCodeAt(2),返回位置2的字符编码;
字符串操作方法:
- concat(),和数组的concat一样,得到组合后的新的字符串;
- slice()、substring()、substr(),都是获得字串,区别是 slice和substring 的两个参数分别的起始位置和截取位置的后一个位置,substr的第二个参数是返回字符串个数;
位置方法:
indexof 和 lastIndexOf。
trim方法:
创建原来字符串的一个副本,去掉前缀和后缀中所有的空格。
大小写转换方法:
toLowerCase,toUpperCase、toLocaleUpperCase、toLoacaleLowerCase。
匹配方法:
localCompare方法:比较两个字符串
var s = 'yellow'
console.log(s.localCompare('brick')) // 1
console.log(s.localCompare('yellow')) // 0
console.log(s.localCompare('zoo')) // -1