1.输出字符串中所有的叠字
输入’晴川历历汉阳树,芳草萋萋鹦鹉洲’,输出 [‘历历’,‘萋萋’]
function getSameCharacter(str) {
var arr = [];
for (let i = 0; i < str.length; i++) {
if (str[i] == str[i + 1]) {
let str1 = str[i] + str[i + 1];
arr.push(str1);
}
}
return arr
}
let str = '晴川历历汉阳树,芳草萋萋鹦鹉洲';
console.log(getSameCharacter(str));//['历历','萋萋']
2.打印出 1-1000000 之间的对称数(回文数字),例如 121,131,141,1331
function getSymmetryNum(number) {
let arr = [];
for (let i = 0; i < number; i++) {
let str = i
.toString()
.split('')
.reverse()
.join('');
if (i == str) {
arr.push(str)
}
}
return arr
}
console.log(getSymmetryNum(1000000))
3.获取页面中所有的checkbox属性的input框
function getAllCheckoutBox(input) {
var resultArr = [];
for (var i = 0; i < input.length; i++) {
if (input[i].type == 'checkbox') {
resultArr.push(input[i]);
}
}
return resultArr
}
var inputList = document.querySelectorAll('input');
getAllCheckoutBox(inputList);//把数据传过去,调用函数,接收返回的数据
4.编写一个函数来判断x是不是整数
function isInteger(x) {
if (typeof x !== 'number') {
return x + '不是一个数字'
} else {
x = x.toString();
if (x.includes('.')) {
return x + '是一个数字,但不是一个整数'
} else {
if (x == 0) {
return x + '既不是正整数也不是负整数'
} else if (x.includes('-')) {
return x + '是一个负整数'
} else {
return x + '是一个正整数'
}
}
}
}
var x = 0;
console.log(isInteger(x))
5.下面语句的输出结果
typeof (5/0)//NaN
typeof(typeof(5/0))//number
6.写出下面代码块的输出结果
var globalVar = 'xyz';
(function outerFunc(outerArg) {
var outerVar = 'a';
(function innerFunc(innerArg) {
var innerVar = 'b';
console.log(
'outerArg=' + outerArg + '\n' +
'innerArg=' + innerArg + '\n' +
'outerVar=' + outerVar + '\n' +
'innerVar=' + innerVar + '\n' +
'globalVar=' + globalVar
)
})(456)
})(123)
上面的代码是一道原题,我没有改过,它的输出结果是
outerArg=123
innerArg=456
outerVar=a
innerVar=b
globalVar=xyz,
我在这里给大家解释一下,其实很简单,只是初始的代码太多了,所以看起来有点绕,考察的只不过是函数的作用域的问题,两个自调用的函数,函数的参数在函数的内部相当于是一个局部变量,它和下面的代码是一样的
var globalVar = 'xyz';
(function outerFunc(outerArg) {
//此时outerArg在outerFunc内部相当于是一个局部变量,相对于innerFunc这个函数来说是一个全局的变量
var outerArg = 123
var outerVar = 'a';
(function innerFunc(innerArg) {
//此时的innerArg在innerFunc内部是一个局部变量
var innerArg = 456
var innerVar = 'b';
console.log(
'outerArg=' + outerArg + '\n' +
'innerArg=' + innerArg + '\n' +
'outerVar=' + outerVar + '\n' +
'innerVar=' + innerVar + '\n' +
'globalVar=' + globalVar
)
})(456)
// console.log(outerArg)
})(123)
7.写出下面代码的输出结果
let obj = {
a: 1, b: 2, c: 3 };
obj.__proto__ = {
c: 4 };//记得是在obj这个对象的原型上面赋值的,不是在当前对象,是在当前对象的父级上面添加的
let {
a, b, c } = obj
console.log(c)//c=3
8.写出下面代码的打印结果
function foo(argument) {
console.log(this.a, argument);//2,3
return this.a + argument
}
var obj = {
a: 2 };
var bar = foo.bind(obj);//这里只是改变了this指向,这时的this指向的是obj,没有执行函数,因此obj.a=2,argument是调用函数时传入的参数,所以是3,结果就是5了
var b = bar(3);
console.log(b)//5
//主要是this的指向问题和bind改变this指向后不会调用方法,
9.输出下面代码的输出顺序
const a = 2;
setTimeout(() => {
console.log('a')//a
});
(function () {
const a = 1;
console.log('b');//b
console.log(v);//undefined,声明提升的原因
var v = 'z'
})();
console.log(a)//2
//他们的输出结果是 b,undefined,2,a,这是因为js是单线程的,延时器是异步的,所以放在最后面执行。
10.写出下面代码的输出结果(这是一道经典的面试题,我在很多的地方见过)
window.val = 1;
var json = {
val: 10,
dbl: function () {
this.val *= 2;
}
}
json.dbl();//json调用的时候,函数执行的是json.val=json.val*2,没用关键字声明,所以是json.val变成了20
var dbl = json.dbl;//变量赋值
dbl();// 相当于是window调用,所以是window.val=window*2,所以window的值变成了2
// 2 + 20 = 22
console.log(window.val + json.val)
猛地一看,你会觉得结果是什么12,21,还是多少,其实真正的答案是22.这是为什么呢?请看注释文字
11.数组乱序
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.sort(function () {
return Math.random() - 0.5;
});
console.log(arr)
这是我的一个朋友遇到的面试题,感觉还是挺简单的,在这里分享给大家