JavaScript的问题记录
关于以下题目均来源于网络,在空余时间查看为了方便记忆在此记录📝
1.京东:分别写出下面代码返回值
String('11') == new String('11');
String('11') === new String('11');
2
New String 返回的是一个对象
2.头条:修改打印出99-0或0-99
条件:不能修改for循环的值和Math.floor(Math.random()*1000)
function print(i){
setTimeout(()=>{
console.log(i)
},Math.floor(Math.random()*1000))
}
for(var i = 100; i>0; i--){print(i)}
2
3
4
5
6
7
1.使用立即执行函数解决
2.0-99的话console.log(100 - i)
答
function print(i){
setTimeout( (() => {
console.log(100-i);
})(), Math.floor(Math.random() * 1000));
}
for(var i = 100; i>0; i--){print(i)}
2
3
4
5
6
7
8
还有滑稽的就是直接注释了定时器~跑题了
3.关于var,let,const,的区别
var全局声明可能变量名重复,循环的时变量泄漏为全局变量。会发生变量提升现象
let块级作用域适合循环计数器,不允许重复声明,const声明一个只读的常量。一旦声明,常量的值就不能改变。const
的作用域与let
命令相同:只在声明所在的块级作用域内有效
阮一峰老师的详解http://es6.ruanyifeng.com/#docs/let
4.在输入框中判断输入的是否是一个正确的地址
function isUrl(url) {
try {
new URL(url);
return true;
}catch(err){
return false;
}}
2
3
4
5
6
7
5.for循环和forEach,map的性能比较
for循环是常见的循环语句forEach和map是在ES5出的,但是在性能上后者不如前者,在次数少的情况下forEach会比for要快,但是到达了十万次时forEach明显就跟不上了。在大数据量的情况下for循环的兼容性和多环境运行表现比较优秀,forEach的优点是在数据量小时占优势,语义话更简洁。循环时没有返回值。map和forEach差不多但是map循环有返回值
参考文章
js数组循环分析
6.什么情况下 a === a - 1
第一个答案是正负Infinity
Infinity 属性用于存放表示正无穷大的数值。
任何一个有穷的数和infinity的加减运算的结果都是infinity
第二种就是任意比较大的数也可以
let c = 121231238213764376347346734;
undefined
console.log(c === c-1)
VM425:1 true
2
3
4
7.请写下下面打印顺序
头条题:详解
这道题主要考察的是事件循环中函数执行顺序的问题,其中包括async
,await
,setTimeout
,Promise
函数。
//请写出输出内容
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
8.将数组扁平化去并除其中重复部分数据
携程题:
要求:编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
答:
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{ return a-b})
Flat():arr.flat(Infinity) 使用 Infinity 作为深度,展开任意深度的嵌套数组
new Set():ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
sort(): 方法用于对数组的元素进行排序