软件工程大三末尾找前端实习,遇到的面试题(部分)
1.true == 3,返回值是true对吗
答案: 错
解析: 正确答案是false, 经过
console.log(true == 1); // true
console.log(true == 3); //false
console.log(false == 0); // true
console.log(false == 3); // false
可以验证出js中, 1对应true, 0对应false, 其他数字都是不等的.
==
比较前会先进行类型转换, 0转换成false, 1转换为true.
2.将 I am reading 转换为 Reading am I
解答:
let str = "I am reading";
function reverseStrAndUpper(str) {
let res = "";
let strArr = str.split(" ");
strArr.reverse();
strArr[0] = strArr[0][0].toUpperCase() + strArr[0].substring(1);
let i;
for (i = 0; i < strArr.length - 1; i++) {
res += strArr[i] + " ";
}
res += strArr[i];
return res;
}
console.log(reverseStrAndUpper(str));
3.五子棋小游戏
4.使用递归计算n以内质数的和
// 参数:整数
// 功能:判断参数是不是质数
// 返回值:质数本身(质数)/0(非质数)
function isPrime(x) {
if (x <= 1) {
return 0;
}
let r = Math.floor(Math.sqrt(x));
let l = 2;
while (l <= r) {
if (x % l == 0) {
return 0;
}
l++;
}
return x;
}
// 参数:整数n
// 功能:递归计算n以内的质数的和
// 返回值:n以内的质数的和(不含n)
function sumOfPrime(n) {
if (n <= 2) return 0;
return sumOfPrime(n - 1) + isPrime(n - 1);
}
// 求100以内的质数和
let res = sumOfPrime(100)
console.log(res);
5、按条件合并相邻项
说明:实现一个方法,可将数组中相邻的项按条件合并
示例:
adjoin([1, 2, 3, 4, 5], item => item !== 3); // [[1, 2], 3, [4, 5]]
adjoin([1, 2, 3, 4], item => item < 3); // [[1, 2], 3, 4]
// 参数:数组,条件(lambda表达式)
// 功能:按条件合并相邻项
// 返回值:合并后的数组
function adjoin(dataList, checker) {
let res = [];
for (let i = 0, len = dataList.length; i < len; i++) {
let tmp = [];
while (i < len) {
if (checker(dataList[i])) {
tmp.push(dataList[i++]);
} else {
break;
}
}
if (tmp.length > 0) {
res.push(tmp);
}
if (i < len) {
res.push(dataList[i]);
}
}
return res;
}
// 测试
console.log(adjoin([1, 2, 3, 4, 5], item => item !== 3)); // [[1, 2], 3, [4, 5]]
console.log(adjoin([1, 2, 3, 4], item => item < 3)); // [[1, 2], 3, 4]
6.实现一个ManBehavior
说明:实现一个ManBehavior,ManBehavior可以有以下一些行为
示例:
1.ManBehavior(“Hank”)输出:
Hi! This is Hank!
2.ManBehavior(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~
3.ManBehavior(“Hank”).eat(‘dinner’).eatFirst(“lunch”)输出
Eat lunch~
Hi This is Hank!
Eat supper~
4.ManBehavior(“Hank”).eat(‘dinner’).eatFirst(“lunch”).eatFirst(“breakfast”)输出
Eat breakfast~
Eat lunch~
Hi This is Hank!
Eat supper~
class ManBehavior {
constructor(name) {
this._command = [];
this._command.push(`Hi! This is ${
name}!`)
}
eat(str) {
this._command.push(`Eat ${
str}~`);
return this;
}
eatFirst(str) {
this._command.unshift(`Eat ${
str}~`);
return this;
}
execute() {
this._command.forEach(element => {
console.log(element);
});
}
}
// 测试
new ManBehavior('Hank').execute()
new ManBehavior('Hank').eat('dinner').eat('supper').execute()
new ManBehavior('Hank').eat('dinner').eatFirst('lunch').execute()
new ManBehavior('Hank').eat('dinner').eatFirst('lunch').eatFirst('breakfast').execute()
7.js的释放内存机制
JS是自动释放内存的, js解释器可以检测到什么时候程序不再使用一个变量了就会把它所占用的内存释放掉.
但是闭包赋给一个var变量, 结果就是因为js解释器分不清到底还会不会用到, 于是不释放闭包的变量.
function func(){
let i=0;
return ()=>{
console.log(i++);
}
}
var fn = func();
fn()
fun()
就是一个闭包。
如有错误, 请留言指正, 先谢过了.