目录
3、数组有哪些方法?splice与slice的区别?有哪些去重方法?
1、JS判断类型有哪些方法?
- typeof:除了null、数组、对象不能具体判断(结果为Object),其它都可以判断。但是其中返回的类型都是字符串形式,分别是:'string','boolean','number','undefined','function','object'……
- A instanceof B:判断A是否为B的实例对象,从而判断A是否为B类型。一般用来进行引用数据类型的判断,主要作用是判断一个实例是否属于某种类型。切记!!!instanceof后面一定要是对象类型,并且大小写不能错。
- constructor:判断方法跟instanceof相似,但是检测对象与Instanceof不一样,还可以处理基本数据类型的检测,不仅是对象类型。PS:null和undefined没有constructor
- object.prototype.toString.call(),适用于所有类型的判断检测,注意区分大小写。
object.prototype.toString.call('123')//[object String]
2、如何交换两个变量的值?
- 临时变量法
var a = 1 var b = 2; var temp = a a = b b = temp
- 加减法
var a = 1 var b = 2; a = a+b // a = 1+2 = 3 b = a-b // b = 3-2 = 1 a = a-b // a = 3-1 = 2
- 解构赋值法es6
var a = 1 var b = 2 [a, b] = [b, a]
- 数组法
var a = 1 var b = 2 a = [a, b] b = a[0] a = a[1]
太多了……
3、数组有哪些方法?splice与slice的区别?有哪些去重方法?
- pop【删除最后一个元素,并返回删除元素】
- push【向数组末尾添加一个或更多元素,且返回新的数组的长度】
- shift【删除第一个元素,并返回删除元素】
- unshift【向数组开头添加一个或更多元素,且返回新的数组的长度】
- slice【start, end)
可以用来从数组提取指定元素,不会改变原数组,会返回一个新数组.。 当end省略不写,此时会截取从开始索引往后的所有元素, 当索引为负值时,则从后往前计算 - splice(start, 删除的数量, 替换删除的元素) 用于删除数组中的指定元素,并将删除元素作为返回值返回,如果没有删除元素,则会返回一个空数据。会改变原数组。
- concat()【 用于连接两个或多个数组,并将新的数组返回】
- join()【该方法可以将数组转换为一个字符串】
在join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符,
如果不指定连接符,则默认使用,作为连接符 - reverse()【访方法用来反转数组 ,会修改原数组】
- sort()
sort()背后原理是什么?
sort()方法用于数组的元素进行排序,并返回数组,默认排序顺序是根据字符串Unicode码点。语法: array. sort(参数),参数可选。但是规定排序顺序,参数必须是函数,且是一个比较函数;
当return: a-b 从小到大b-a 从大到小arr. sort(function(a,b){ return a-b } a-b 从小到大 b-a 从大到小
var arr = [ {name:’张三’,age:1}, {name:’李四’,age:12}, {name:’王二’,age:23} ]; Function compare(age){ Return function(a,b){ Var value1 = a[age]; Var value2 = b[age]; Return value1 – value2; } } Console.log(arr.sort(compare(‘age’))
去重:
// 方法1:通过es6新增的Set数据结构结果 [...new Set(重复数组)]
var arr = [1,2,3,2,3]
console.log([...new Set(arr)])
// 方法2:通过filter配合indexOf实现数组去重
var arr = [1,2,3,2,3]
var newarr = arr.filter(function(item, i) {
// i=0 item值是1 arr.indexOf(item) 返回0 真
// i=1 item值是2 arr.indexOf(item) 返回1 真
// i=2 item值是3 arr.indexOf(item) 返回2 真
// i=3 item值是2 arr.indexOf(item) 返回1 假
// i=4 item值是3 arr.indexOf(item) 返回2 假
return i === arr.indexOf(item);
})
console.log(newarr)
// 方法3:定义空数组,通过forEach遍历重复的数组,通过indexOf判断当前值是否在数组中,不在就push
var newarr = []
var arr = [1,2,3,2,3]
arr.forEach(function(item, i) {
if (newarr.indexOf(item) === -1)
{
newarr.push(item)
}
})
console.log(newarr)
// 方法4:定义空数组,通过forEach遍历重复的数组,通过includes判断当前值是否在数组中,不在就push
var newarr = []
var arr = [1,2,3,2,3]
arr.forEach(function(item, i) {
if (!newarr.includes(item))
{
newarr.push(item)
}
})
console.log(newarr)
// 方法5:利用对象的属性去重
var arr = [1,2,3,2,3]
var newarr = []
var obj = {}
arr.forEach(function(item) {
if (!obj[item]) {
obj[item] = item // 出现记录
newarr.push(item)
}
})