JS基础面试题

目录

1、JS判断类型有哪些方法?

2、如何交换两个变量的值? 

3、数组有哪些方法?splice与slice的区别?有哪些去重方法?


1、JS判断类型有哪些方法?

  1. typeof:除了null、数组、对象不能具体判断(结果为Object),其它都可以判断。但是其中返回的类型都是字符串形式,分别是:'string','boolean','number','undefined','function','object'……
  2. A instanceof B:判断A是否为B的实例对象,从而判断A是否为B类型。一般用来进行引用数据类型的判断,主要作用是判断一个实例是否属于某种类型。切记!!!instanceof后面一定要是对象类型,并且大小写不能错。
  3. constructor:判断方法跟instanceof相似,但是检测对象与Instanceof不一样,还可以处理基本数据类型的检测,不仅是对象类型。PS:null和undefined没有constructor
  4. object.prototype.toString.call(),适用于所有类型的判断检测,注意区分大小写。
    object.prototype.toString.call('123')//[object String]

2、如何交换两个变量的值? 

  1. 临时变量法
    var a = 1
    var b = 2;
    var temp = a
    a = b
    b = temp
  2. 加减法
    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
  3. 解构赋值法es6
    var a = 1
    var b = 2
    [a, b] = [b, a]
  4. 数组法
    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)
	}
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值