0%

一些面试题

  • 如何获取2017-03-10这样格式的日期
  • 获取随机数,要求是长度一致的字符串格式
  • 写一个能遍历对象和数组的通用forEach函数

关于对象补充一点:复制保存着对象的某个变量时,操作的是对象的引用,比如我们可以将对同一对象的引用的其中一个变量赋值为null,而不会影响其他指向这个对象的变量的值,但是当为对象添加属性的时候,操作的是对象本身,体现在当我们为保存着对象的某个变量添加属性的时候,其他所有的变量也会跟着受影响。


日期类型(Function)

1
2
3
4
5
6
7
8
9
Date.now() //获取当前毫秒,1970开始
var dt = new Date();
dt.getTime() // 获取毫秒数,第二行的时间对象
dt.getFullYear() // 年
dt.getMonth() // 月份(0-11)
dt.getDate() // 日期(1-31)
dt.getHours() // 小时(0-23)
dt.getMinutes() // 分钟 (0-59)
dt.getSeconds() // 秒(0-59)

题目:获取2017-06-10格式的日期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function formatDate (dt) {
if (!dt) {
var dt = new Date();
}
var year = dt.getFullYear();
var month = dt.getMonth() + 1;
var date = dt.getDate();
if (month < 10) {
// 强制类型转换
month = '0' + month;
}
if (date < 10) {
// 强制类型转换
date = '0' + date;
}
// 强制类型转换
return year + '-' + month + '-' + date
}
var dt = new Date();
var formattedDate = formatDate(dt);
console.log(formattedDate);

Math对象(Object)

1
Math.random(); //获取0到1之间的随机数,用作清除缓存

获取随机数,要求返回长度一致的字符串

1
2
3
4
var random = Math.random();
random = random + '0000000000' // 后面加10个0
random = random.slice(0, 10);
console.log(random);

数组API

  • forEach遍历所有元素
1
2
3
4
5
6
7
8
var arr = ['a', 'b', 'c'];
arr.forEach(function (item, index) {
遍历所有数组元素
console.log(index, item);
// 0 a
// 1 b
// 2 c
})
  • every判断所有元素是否都符合条件
1
2
3
4
5
6
7
8
var arr = [1, 2, 3];
var result = arr.every(function (item, index) {
// 用来判断数组中所有元素是不是都满足一个条件
if (item < 4) {
return true;
}
})
console.log(result);// true
  • some判断至少有一个元素符合条件
1
2
3
4
5
6
7
var arr = [1, 2, 3];
var result = arr.some(function (item, index) {
if (item < 2) {
return true
}
})
console.log(result); // true
  • sort排序(改变原来的数组)
1
2
3
4
5
6
7
8
9
var arr = [1, 4, 2, 3, 5];
var arr2 = arr.sort(function (a, b) {
// 从小到大排序
return a - b;

// 从大到小排序
// return b - a;
})
console.log(arr2);

sort方法默认会调用每个对象的toString方法,但往往不符合人类的思维习惯,因此可以传入一个比较函数,按照我们的意愿进行排序。

对于sort中的比较函数,如果第一个参数想要放在第二个参数之前,那么返回-1,如果第一个参数想要放在后面,那么返回1,否则为0。

  • map对元素重新组装,生成新数组
1
2
3
4
5
6
var arr = [1, 2, 3, 4];
var arr2 = arr.map(function(item, index) {
// 将元素重新组装并返回
return '<b>' + item + '</b>'
})
console.log(arr2);
  • filter过滤符合条件的元素,生成新数组
1
2
3
4
5
6
7
8
var arr = [1, 2, 3];
var arr2 = arr.filter(function (item, index) {
if (item >= 2) {
// 通过某个条件过滤数组
return true
}
})
console.log(arr2)

对象API

1
2
3
4
5
6
7
8
9
10
11
12
var obj = {
x: 100,
y: 200,
z: 300
}
var key;
for (key in obj) {
// 只打印自身属性,而不打印原型链上面的属性
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}

写一个能遍历对象和数组的forEach函数

1
2
3
4
5
6
7
8
9
10
11
12
function forEach (obj, fn) {
if (obj instanceof Array) {
obj.forEach(function(item, index) {
fn(index, item);
})
} else {
// 不是数组就是对象
for (key in obj) {
fn(key, obj[key]);
}
}
}

2018 年 1月 7日