JS练习
1.练习一
let a={},b='0',c=0;
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //“这是c”
console.log(a) //{0: "这是c"}
2.练习二
//Symbol创建唯一值
Symbol('1')===Symbol('1') //false
let a={},b=Symbol('1'),c=Symbol('1');
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //“这是b”
console.log(a) //{Symbol(1): "这是b", Symbol(1): "这是c"}
3.练习3
let a={},b={name:"nichen"},c={age:20};
a[b]="这是b";
a[c]="这是c";
console.log(a[b]) //"这是c"
console.log(a) //{"[Object Object]":"这是c"}
4练习4
console.log('正常执行');
async function async1(){
console.log('async1 start')
await async2()
console.log('async2 end')
}
async function async2(){
console.log("async2")
}
console.log("script start")
setTimeout(function(){
console.log("setTimeout")
},0)
async1();
new Promise((resolve,reject)=>{
console.log("promise1")
resolve()
}).then(res=>{
console.log('promise2')
})
console.log("script end")
输出=>
“正常执行”
“script start”
“async1 start”
“async2”
“promise1”
“script end”
“async2 end”
“promise2”
“setTimeout”
5.练习5
var x=0,y=1;
function fn(){
x+=2;
fn=function(y){
console.log(y+(--x))
}
console.log(x,y)
}
fn(3)
fn(4)
console.log(x,y)
2 1
5
1 1
6.练习6
测量一个javascript脚本程序执行消耗的时间. console.time() 方法是作为计算器的起始方法。该方法一般用于测试程序执行的时长。console.timeEnd() 方法为计算器的结束方法,并将执行时长显示在控制台。如果一个页面有多个地方需要使用到计算器,可以添加标签参数来设置。
console.time(label)
console.timeEnd(label)
这两个方法均使用一个参数,参数值可以为任何字符串,但是这两个方法所使用的参数字符串必须相同,才能正确地统计出开始时间与结束时间之间所经过的毫秒数。
console.time(1);
setTimeout(function(){
console.timeEnd(1);
},16.7); // 1: 16.700927734375 ms
setTimeout(()=>{
console.log(1)
},20)
console.log(2)
setTimeout(()=>{
console.log(3)
},10)
console.log(4)
console.time('AA')
for(let i=0;i<1000;i++){
}
console.timeEnd('AA')
console.log(5)
setTimeout(()=>{
console.log(6)
},8)
console.log(7)
setTimeout(()=>{
console.log(8)
},15)
console.log(9)
2
4
AA: 0.05224609375 ms
5
7
9
6
3
8
7.练习7
var a = ?;//设置a为多少让下面的等式成立
if(a==1 && a==2 && a==3){
console.log(1)
}
// toString
a={
i:0,
//toSting可以换成valueOf
toString(){
return ++this.i
}
}
// 数据劫持实现
var i=0;
Object.defineProperty(window,'a',{
get(){
return ++i;
}
})
//
var a=[1,2,3];
a.toString=a.shift;
8.练习8
数组去重
let arr=[23,45,1,23,43,234,21,9,10,23,45]
// 一
console.log([...new Set(arr)]) //[23, 45, 1, 43, 234, 21, 9, 10]
let arr2=Array.from(new Set(arr)) //[23, 45, 1, 43, 234, 21, 9, 10]
// 二
let arr2=[];
arr.forEach((item,index)=>{
if(!arr2.includes(item)){
arr2.push(item)
}
})
console.log(arr2) //[23, 45, 1, 43, 234, 21, 9, 10]
// 三
function unique(arr){
return arr.filter((item,index)=>{
console.log(arr.indexOf(item,0))
return arr.indexOf(item,0)===index
})
}
var arr=['dd',true,false,1,34,1,'dd',22,null,true];
console.log(unique(arr)) //["dd", true, false, 1, 34, 22, null]
9.数组扁平化
var arr=[12,[12,33],[23,45,67,24],[34,56,43,[34,56]],[23]]
//1
var arr1 = arr.flat(Infinity);
console.log(arr1) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
//2
var arr2=arr.toString().split(',').map(item=>parseFloat(item))
console.log(arr2) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
//3
var arr3=JSON.stringify(arr).replace(/(\[|\])/g,'').split(',').map(item=>parseFloat(item))
console.log(arr3) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
//4
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr)
}
console.log(arr) //[12, 12, 33, 23, 45, 67, 24, 34, 56, 43, 34, 56, 23]
9.练习9
实现斐波那契数[1,1,2,3,5,8,13,21];fibonacci(0)=>1;fibonacci(4)=>5
//1
function fibonacci(n){
if(n<=1) return 1;
let arr=[1,1];
for(let i=n+1-2;i>0;i--){
let a=arr[arr.length-2];
let b=arr[arr.length-1]
arr.push(a+b);
}
// let i=n+1-2;//创建多少个
// while(i>0){
// let a=arr[arr.length-2];
// let b=arr[arr.length-1]
// arr.push(a+b);
// i--;
// }
return arr[arr.length-1]
}
//2
function fibonacci(count){
function fn(count,curr=1,next=1){
if(count==0){
return curr
}else{
return fn(count-1,next,curr+next);
}
}
return fn(count)
}
//3
function fibonacci (n) {
if ( n <= 1 ) {return 1};
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(0)) //1
console.log(fibonacci(5)) //8