前端面试题之JavaScript(四)


1.什么是JSON?JSON 格式的数据需要遵循什么规则?

  • JSON(JavaScript Object Notation)是一种用于数据交换的文本格式目的是取代繁琐笨重的XML格式。
  • 规则
  1. 复合类型的值只能是数组或对象,不能是函数,正则表达式对象,日期对象。
  2. 简单类型的值只有四种:字符串,数值(必须是以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
  3. 字符串必须使用双引号表示,不能使用单引号。
  4. 对象的键名必须放在双引号里面。
  5. 数组或对象最后一个成员的后面,不能加逗号。

2.使用 JSON 对象实现一个简单的深拷贝函数(deepCopy)

function deepCopy(obj){
  return JSON.parse(JSON.stringify(obj));
}
var obj = {
    name: 'hunger',
    age: 3,
    friends: ['aa', 'bb', 'cc']
};
var obj2=deepCopy(obj);

obj.age=4;
console.log(obj2.age);  // 3l.

3.数组方法里push、pop、shift、unshift、join、splice、slice、concat、reverse、sort、分别是什么作用?用 splice函数分别实现push、pop、shift、unshift方法

  • push(char):尾部插入(推入)一项,返回长度值。
  • pop():尾部移除一项,返回移除的元素。
var a = new Array(1,2,3);
a.push(4);
console.log(a);//[1, 2, 3, 4]
console.log(a.length);//4
console.log(a.pop());//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3
  • unshif(char): 首部插入(推入)一项,返回长度值。
  • shift():首部移除一项,返回移除的元素。
var a=new Array(1,2,3);
a.unshift(4);
console.log(a);//[4, 1, 2, 3]
console.log(a.length);//4
console.log(a.shift());//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3
  • join(char): 使用参数作为连接符连接成一字符串,返回字符串
var a = [1,2,3,4,5];
console.log(a.join(',')); //1,2,3,4,5
console.log(a.join(' ')); //1 2 3 4 5
  • splice(起始位置,删除的个数(从起始位置开始删除),在起始位置开始之前添加的元素1,添加的元素2,...):返回删除元素的数组原数组改变
var a = [1,2,3,4,5];
console.log(a.splice(1,0,9,99,999));  
console.log(a.length); //8
console.log(a);//[1, 9, 99, 999, 2, 3, 4, 5]
console.log(a.splice(1,3,8,88,888));
console.log(a.length);//8
console.log(a);//[1, 8, 88, 888, 2, 3, 4, 5]
  • slice(start,end):截取数组,含start,不含end,可以有负数,返回数组,不影响原数组
var a = [1,2,3,4,5];
console.log(a); //[1, 2, 3, 4, 5]
console.log(a.slice(1,2));//[2]
console.log(a.slice(1,-1));//[2, 3, 4]
console.log(a.slice(3,2));//[]
console.log(a); //[1, 2, 3, 4, 5]
  • concat()/concat(array):拼接数组,返回数组,原数组不变
var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
console.log(a.concat()); //[1,2,3,4,5]
console.log(b.concat("zhx"));//[6, 7, 8, 9, "zhx"]
  • reverse():数组逆序, 返回数组。
var a = [1,2,3,4,5];
a.reverse();//[5, 4, 3, 2, 1]
console.log(a); //[5, 4, 3, 2, 1]
  • sort()/sort(function):数组排序 ,返回数组。
var a=[7,8,9,10,11];
console.log(a.sort());//[10, 11, 7, 8, 9]
console.log(a);//[10, 11, 7, 8, 9]
---------------------------
var a = [7,8,9,10,11];

a.sort(function(v1,v2){
    return v1-v2;
});
console.log(a);//[7, 8, 9, 10, 11]


  • splice实现push:
var a=[1,2,3,4,5];
function splicePush(){
  
}
  • splice实现pop:
  • splice实现shift:
  • splice实现unshift:
 var a = [1,2,3,4,5];
    //splice=>push
    a.push(6);
    console.log(a);
    a.splice(a.length,0,7);
    console.log(a);
    //spice=>pop
    a.pop();
    console.log(a);
    a.splice(a.length-1,1);
    console.log(a);
    //spluce=>unshift
    a.unshift(0);
    console.log(a);
    a.splice(0,0,-1);
    console.log(a);
    //splice=>shift
    a.shift();
    console.log(a);
    a.splice(0,1);
    console.log(

4. ES5数组扩展方法

  • Array.isArray(obj) :判断一个对象是否为数组
var a = [];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
a instanceof Array; //true
b instanceof Array; //false ES3做法

  • .indexOf(element) :返回元素索引
  • .lastIndexOf(element):返回元素索引
  • .forEach(function(element, index, array){}):给数组的每一项运行给定函数。没有返回值
var a = new Array(1,2,3,4,5,6);

a.forEach(function(e,i,array){
    array[i]= e + 1;
});

console.log(a); //[2, 3, 4, 5, 6, 7]
  • .every(function(element, index, array){}):every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false
  • .some(function(element, index, array){}):some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false
var a=new Array(1,2,3,4,5,6);

console.log(a.every(function(e, i, arr){
return e < 5;
})); //false

console.log(a.some(function(e,i,arr){
  return e > 4;
}));//true
    
  • .map(function(element,index,array){}):遍历数组,返回一个新数组,原数组不变
var a = new Array(1,2,3,4,5,6);

console.log(a.map(function(e){
  return e * e;
}));  // [1, 4, 9, 16, 25, 36]

console.log(a); //[1, 2, 3, 4, 5, 6]
  • .filter(function(element,index,array){}):返回true则把当前元素加入到返回数组中,原数组不变
var a = new Array(1,2,3,4,5,6);

console.log(a.filter(function(e){
  return e % 2 == 0;
})); // [2, 4, 6]

console.log(a); //[1, 2, 3, 4, 5, 6]
  • .reduce(function(previousV1, currentV2,index,array), value):归并从索引值最小开始,返回一个结果
  • .reduceRight(function(previousV1, currentV2,index,array), value):归并从索引值最大开始,返回一个结果
var a = new Array(1,2,3,4,5,6);

console.log(a.reduce(function(v1, v2){
    return v1 + v2;
})); // 21

console.log(a.reduceRight(function(v1, v2){
    return v1 - v2;
}, 100)); // 79

5.写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作

前端面试题之JavaScript(四)_第1张图片
    function squareArr(arr){
      for(var i in arr){
         arr[i]=arr[i]**2;
      }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr)

6.写一个函数,操作数组,返回一个新数组,新数组中只包含正数

前端面试题之JavaScript(四)_第2张图片
    function filterPositive(arr){
      var result=[]
      for(var i in arr){
        if(typeof arr[i]=="number"&&arr[i]>0){
        result.push(arr[i]);
        }
      }
      console.log(result);
}
var arr = [3, -1,  2,  '饥人谷', true]
filterPositive(arr) //[3,  2]
console.log(arr) // [3, -1,  2,  '饥人谷', true]
function filterPositive(arr){
      for(var i=0;i0)){
        arr.splice(i,1);
        i--;//因为删除的时候元素会往前窜;
        }
      }

}
var arr = [3, -1,  2,  '饥人谷', true,-2,-5,7,3,-1,3,-1]
filterPositive(arr);
console.log(arr)
function filterPositive(arr){
      for(var i=arr.length;i>0;i--){
        if(!(typeof arr[i]=="number"&&arr[i]>0)){
        arr.splice(i,1);
        }
      }

}
var arr = [3, -1,  2,  '饥人谷', true,-2,-5,7,3,-1,3,-1]
filterPositive(arr);
console.log(arr) 

7. 查看一个对象本身的所有属性,可以用Object.keys方法

var o = {
  key1: 1,
  key2: 2
};

Object.keys(o);
// ['key1', 'key2']

8. delete命令

  • delete命令用于删除对象的属性,删除成功后返回true。
var o = {p: 1};
Object.keys(o) // ["p"]

delete o.p // true
o.p // undefined
Object.keys(o) // []
  • 不能删除var 命令声明的变量,只能用来删除属性。返回false。
var p = 1;
delete p // false
delete window.p // false
  • 删除一个不存在的属性,不会报错,返回true。
var o = {};
delete o.p // true

你可能感兴趣的:(前端面试题之JavaScript(四))